Documentos de Académico
Documentos de Profesional
Documentos de Cultura
otra solucin ms eficaz, que es tratar por todos los medios que
los propios eventos de teclado del control DataGridView, sobre
todo el eventoKeyPress, respondan a las pulsaciones de las
teclas presionadas. Pero antes de entrar en detalle sobre los
eventos de teclado, vamos a conocer un poco ms sobre lo que
se esconde por dentro del control DataGridView, que no es, ni
ms ni menos, que una serie de controles que los
programadores de Visual Basic suelen conocer bastante bien.
La clase DataGridViewCell
Esta clase representa una celda individual existente en un
control DataGridView, que podemos referenciar fcilmente
efectuando una simple consulta a la propiedad CurrentCell del
control DataGridView:
' Referenciamos la celda actual
'
Dim dgvCell As DataGridViewCell = Me.DataGridView1.CurrentCell
La clase DataGridViewTextBoxCell
Esta clase es la encargada de mostrar texto modificable en una
celda del control DataGridView, y es la clase que por defecto
tendrn todas las celdas existententes en dicho control, salvo
que expresamente le hayamos asignado a la columna otro tipo
de clase DataGridViewXXXColumn de las mencionadas en el
apartado anterior, en cuyo caso, las celdas de esa columna
sern del tipo de objeto especializado.
La clase DataGridViewTextBoxCell hereda directamente de la
clase base DataGridViewCell, de la que toma la inmensa mayora
de sus propiedades y mtodos.
Si nuestra intencin es referenciar el
objeto DataGridViewTextBoxCell alojado en la celda actual del
control DataGridView, ejecutaramos algo parecido a lo
siguiente:
' Referenciamos el control DataGridViewTextBoxCell actual
'
Dim textBoxCell As DataGridViewTextBoxCell = _
TryCast(Me.DataGridView1.CurrentCell, DataGridViewTextBoxCell)
El control DataGridViewTextBoxEditingControl
Por fin hemos llegado al objeto ms recndito de la celda; al
objeto DataGridViewTextBoxEditingControl alojado en el
objetoDataGridViewTextBoxCell existente a su vez en el
objeto DataGridViewCell, representado ste por la celda actual
del control DataGridView.
Desde luego, no me extraa que con tantos nombres parecidos,
y de gran longitud, ms de uno se haga un pequeo lo. Pero
cuando se hayanpeleado un par de veces con las celdas del
control DataGridView, les aseguro que vern las cosas de otra
manera.
Como bien nos d a entender el nombre del
control DataGridViewTextBoxEditingControl, ste hereda
directamente del clsico control de edicin de Visual Basic, el
control TextBox, por tanto, implementa todas las propiedades,
mtodos y eventos de ste ltimo control, permitindonos editar
el contenido de la celda.
Cuando una celda cualquiera del control DataGridView pasa a
modo de edicin, se desencadena el
evento EditingControlShowing, donde el segundo parmetro de
su firma es un objeto de la
clase DataGridViewEditingControlShowingEventArgs (otro
nombre ms largo an para aadir a la lista). Esta clase dispone
nicamente de dos propiedades pblicas: CellStyle (un
objeto DataGridViewCellStyle que referencia a la celda editada),
y Control(que es el control proporcionado para editar el valor de
la celda). Ser de la propiedad Control donde obtendremos el
escndido controlDataGridViewTextBoxEditingControl, tal y como
se muestra en el siguiente ejemplo:
Private Sub DataGridView1_EditingControlShowing( _
ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView1.EditingControlShowing
' Referenciamos el control TextBox subyacente en la celda actual.
'
End Sub
Private Sub cellTextBox_KeyPress( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles cellTextBox.K
eyPress
End Sub
Private Sub cellTextBox_KeyUp( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles cellTextBox.KeyUp
End Sub
Private Sub DataGridView1_EditingControlShowing( _
ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView1.EditingControlShowing
' Este evento se producir cuando la celda pasa a modo de edicin.
' Referenciamos el control DataGridViewTextBoxEditingControl actual.
'
cellTextBox = TryCast(e.Control, DataGridViewTextBoxEditingControl)
' Obtenemos el estilo de la celda actual
'
Dim style As DataGridViewCellStyle = e.CellStyle
' Mientras se edita la celda, aumentaremos la fuente
' y rellenaremos el color de fondo de la celda actual.
'
With style
.Font = New Font(style.Font.FontFamily, 10, FontStyle.Bold)
.BackColor = Color.Beige
End With
End Sub
End If
End Select
' Si es un carcter vlido, y el texto del control
' se encuentra totalmente seleccionado, elimino
' el valor actual del control.
'
If ((isValidChar) And (tb.SelectionLength = tb.TextLength)) Then
tb.Text = String.Empty
End If
If (isSign) Then
' Admitimos los caracteres positivo y negativo, siempre y cuando
' sea el primer carcter del texto, y no exista ya ningn otro
' signo escrito en el control.
'
If ((tb.SelectionStart <> 0) OrElse _
(tb.Text.IndexOf("-") >= 0) OrElse _
(tb.Text.IndexOf("+") >= 0)) Then
e.Handled = True
Return
End If
End If
If (isDecimal) Then
' Si en el control hay ya escrito un separador decimal,
' deshechamos insertar otro separador ms.
'
If (tb.Text.IndexOf(decimalSeparator) >= 0) Then
e.Handled = True
Return
End If
End If
End Sub