Hola espero puedan ayudarme, tengo un Listbox con sus respectivas columnas y filas, necesito moverme entre celdas con el teclado con flechas hacia abajo, arriba, derecha e izquierda tal cual como lo hace EXCEL, alguien sabe como puedo hacerlo?
Hola Karem,
En el evento CellKeyDown tienes que ver si la tecla pulsada es una de las flechas (o Enter o TAB, por ejemplo) y luego utiliza el mtodo listbox.EditCell para llevar el cursor a la celda que sea adecuada.
Si tienes dudas no dudes en preguntar.
Julen
la propiedad “selection type” solo tiene dos modos: single y multiple. habria que buscar alguna forma de que la seleccion sea por celda
Hola Julen, gracias por tu respuesta, lo que deseo saber es que voy a colocar en el mtodo?
Hola Karem Andrea
Puedes revisar la aplicacion que viene con xojo ListBoxGridExample
Supongo que ya tienes agregados las filas y las columnas en tu lisbox
En el evento Cellaction escribes el siguientes codigo
Me.CellType(row, column) = ListBox.TypeNormal
Me.SetFocus
En el evento Cellclick
Me.fila=row
Me.Columna=column
Me.Celltype(row, column) = Me.TypeEditableTextField
Me.EditCell(row,column)
En el evento CellKeyDown
Dim n as Integer
n=key.Asc
Select case n
Case 1,4,8,9,13,127,45,46,48 to 57
return false
Case 28,29,30,31
Case else
return true
End Select
Dim newFila As Integer = Me.fila
Dim newColumna As Integer = Me.columna
SELECT Case Key
Case Encodings.ASCII.Chr(30) // Up arrow
newFila = Me.Fila-1
If newFila < 0 Then newFila = 0
Me.Fila = newFila
Me.CellType(newFila,newColumna) = Listbox.TypeEditableTextField
Me.EditCell(newFila,newColumna)
Case Encodings.ASCII.Chr(31) // Down arrow
newFila = Me.Fila+1
If newFila > Me.ListCount-1 Then
newFila=Me.ListCount-1
End If
Me.Fila = newFila
Me.CellType(newFila,newColumna) = Listbox.TypeEditableTextField
Me.EditCell(newFila,newColumna)
Case Encodings.ASCII.Chr(28) // Left arrow
newColumna = newColumna-1
If newColumna < 0 Then
newColumna = 0
End If
Me.Fila = row
Me.Columna = newColumna
Me.CellType(newFila,newColumna) = Listbox.TypeEditableTextField
Me.EditCell(newFila,newColumna)
Case Encodings.ASCII.Chr(29) // Right arrow
newColumna = newColumna+1
If newColumna > Me.ColumnCount-1 Then
newColumna = Me.ColumnCount-1
End If
Me.Fila = row
Me.columna = newColumna
Me.CellType(newFila,newColumna) = Listbox.TypeEditableTextField
Me.EditCell(newFila,newColumna)
End Select
En el evento KeyUp
Dim newFila As Integer = Me.fila
Dim newColumna As Integer = Me.columna
If Asc(Key)=13 Then
newColumna = newColumna+1
If newColumna > Me.ColumnCount-1 Then
newColumna = Me.ColumnCount-1
End If
Me.columna = newColumna
Me.CellType(newFila,newColumna) = Listbox.TypeEditableTextField
Me.EditCell(newFila,newColumna)
End If
En el evento open
Me.ColumnType(0)=Listbox.TypeEditable
Me.ColumnType(1)=Listbox.TypeEditable
Me.ColumnType(2)=Listbox.TypeEditable
Para el ejemplo es un listbox de 3 filas y 3 columnas
Espero que le ayude
Cordialmente,
Raul
Hola Raul muchsimas gracias por tu respuesta, si me ayudo.