Pulsacion de la tecla Back en el KeyPress de un Grid

06/05/2006 - 11:24 por Alicia | Informe spam
Hola a todos. Tengo un formulario con un label y un grid. El foco siempre lo
tiene el grid, pero cuando escribes algo aparece en el label (lo he puesto
en el evento KeyPress de grid). El problema es que cuando pulso la tecla
Back para borrar, me escribe un cuadrado, asi que utilizo la funcion remove
para borrar los caracteres. Sin embargo me da un error que dice: "Index and
count must refer to a location within the string. Parameter name: count"

Este es el codigo, el codigo esta comentado con algunas dudas.

Private Sub dtgvBusquedas_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles dtgvBusquedas.KeyPress
lblTexto.Text &= e.KeyChar 'Guardo en el label el caracter que
introduzco
Dim charCaracter As Char = e.KeyChar.ToString.Trim 'Me guardo el
mismo caracter en una variables
If Keys.Enter.ToString.Trim = charCaracter Then
Me.dtgvBusquedas.Focus() 'Si pulso Enter, el foco se queda en el
Grid
End If
If Keys.F2.ToString.Trim = charCaracter Then ' Si pulso F2, realiza
otra funcion
If (Me.tscCampos.ComboBox.SelectedIndex =
Me.tscCampos.ComboBox.Items.Count - 1) Then
Me.tscCampos.ComboBox.SelectedItem =
Me.tscCampos.ComboBox.Items(0)
Else
Me.tscCampos.ComboBox.SelectedItem =
Me.tscCampos.ComboBox.Items(Me.tscCampos.ComboBox.SelectedIndex + 1)
End If
End If
If Keys.Back.ToString.Trim = charCaracter Then 'Si pulso Back, debe
borrar el caracter
'El principal error que me da es que aqui nunca entra. Para que
entre tengo que hacerlo con el raton
lblTexto.Text = lblTexto.Text.Remove(lblTexto.Text.Length - 1,
2)
'Pongo que borre dos caracteres para que me borre el cuadrado
que escribe el Back y el caracter que realmente quiero borrar, y es ahi
donde da el error descrito anteriormente
End If
End Sub
 

Leer las respuestas

#1 Alicia
08/05/2006 - 09:38 | Informe spam
Muchas gracias. Me ha servido de gran ayuda.
Un saludo.


"Patxi Sanz" <patxisanz[ARROBA]yahoo[PUNTO]es> escribió en el mensaje
news:
Hola Alicia:

¿Y por qué agregas el carácter de retroceso si luego lo quitas? Puedes usar
Char.IsControl() para comprobar si se pulsó un carácter de control, y si es
así, realizar una serie de acciones; de lo contrario, será una letra, número
o símbolo y se muestra en el Label. Por ejemplo,

Private Sub dtgvBusquedas_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles dtgvBusquedas.KeyPress

If Char.IsControl(e.KeyChar) Then
'Es una tecla de control
Dim tecla As Keys = CType(AscW(e.KeyChar), Keys)

Select Case tecla
Case Keys.Back
'He pulsado Back y quito 1 carácter
If lblTexto.Text.Length > 0 Then
lblTexto.Text =
lblTexto.Text.Remove(lblTexto.Text.Length - 1)
End If
Case Keys.F2
'Hago otras cosas
'...
Case Keys.Enter
'Recupero el foco
dtgvBusquedas.Focus()
End Select
Else
'Es una letra, número o símbolo
lblTexto.Text &= e.KeyChar
End If
End Sub

Espero te sirva,

Un saludo,


Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
Tudela (NA)

Preguntas similares