Underc0de

Programación General => Visual Basic => Códigos Fuentes => Mensaje iniciado por: ANTRAX en Julio 26, 2010, 10:58:02 AM

Título: Simular un MSFlexGrid Editable
Publicado por: ANTRAX en Julio 26, 2010, 10:58:02 AM
Grid con casillas editables.
En el ejemplo veremos cómo usar tanto un control TextBox como un comboBox.
como verás en el código es fácil decidir si debemos mostrar el textbox o el combo... dependiendo de lo que necesitemos usar... en caso de que necesites usar diferentes combos, te recomiendo que uses un array del control combo1 para que te resulte fácil de interceptar las pulsaciones y otras acciones con dichos controles... puede que en otra ocasión amplíe este ejemplo con esto que digo, además de usar un control checkbox... pero eso será en otra ocasión... así que... paciencia.

Te explico lo que el código hace... aunque puedes seguirlo sin problemas, eso espero, con los comentarios incluidos en el código de ejemplo.

En principio el Grid sólo tendrá una fila "disponible", cuando pulsamos en una de las celdas de la última fila, la cual está identificada con ">>*", se creará una nueva fila... cuando pruebes el código de ejemplo, sabrás de que estoy hablando.

Para introducir algo en cualquiera de las celdas, podemos hacerlo de varias formas:
-haciendo doble-click en la celda a editar,
-escribiendo directamente en el grid,
-pulsando la tecla F2

Para aceptar lo que hemos escrito, pulsaremos Intro o simplemente haciendo Click en cualquier otra celda.
Si se pulsa ESC, se cancela la edición de la celda.

En el código mostrado, uso dos procedimientos para guardar el contenido del grid en un fichero de texto y para leer de ese fichero y asignarlo al grid. Este código tendrás que adaptarlo a los campos que tengas en el grid, aunque usado tal y como lo muestro te puede ser útil al 100%.

Bueno, me dejo de "cháchara" y te muestro el código.

El formulario contiene los siguientes controles:
Un control FlexGrid llamado Grid2,
un TextBox llamado Text1,
un ComboBox llamado Combo1,
un PictureBox llamado picStatus con la propiedad Align = 2 (para que se ajuste a la parte inferior),
una etiqueta llamada lblStatus, (insertada en el picStatus),
un botón llamado cmdSalir, (insertado en el picStatus).

Nota:
No tienes que preocuparte por "insertar" los dos últimos controles mencionados en el PictureBox, ya que eso se hace en el código del evento Form_Load

Como bono extra, una función para "interpretar" fechas y asignar el formato que queramos a partir de varias formas de entrada, por ejemplo, acepta fechas con y sin separadores, e incluso sin indicar el año...

Código (vb) [Seleccionar]


'------------------------------------------------------------------------------
' Prueba de Grid con celdas editables (09/May/01)
' Revisado: 17/May/2001
'
' Ejemplo de código con TextBox y ComboBox
'
' ©Guillermo 'guille' Som, 2001
'------------------------------------------------------------------------------
Option Explicit

Private sFicDatos As String ' Fichero con los datos del grid
Const cNuevaFila As String = ">>*" ' Para indicar que es una nueva fila
Private ControlVisible As Boolean ' Si el control está o no visible (editándose)
Private LastRow As Long ' La última fila en que se editó
Private LastCol As Long ' La última columna en que se editó

Private Sub cmdSalir_Click()
Unload Me
End Sub

Private Sub Combo1_Change()
If Combo1.Visible Then
Grid2.TextMatrix(LastRow, LastCol) = Combo1.Text
AsignarCelda
End If
End Sub

Private Sub Combo1_Click()
Combo1_Change
End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
KeyAscii = 0
AsignarCelda
SiguienteCelda
ElseIf KeyAscii = vbKeyEscape Then
KeyAscii = 0
Combo1.Visible = False
End If
End Sub

Private Sub Form_Load()
Dim i As Long
Dim s As String
'
picStatus.Height = 585
With lblStatus
.Caption = " Código de ejemplo: ©Guillermo 'guille' Som, 2001 <[email protected]>"
Set .Container = picStatus
.Height = 285
.BorderStyle = vbFixedSingle
.Left = 90
.Top = 120
.Visible = True
End With
With cmdSalir
Set .Container = picStatus
.Height = 405
.Top = 60
.Visible = True
End With
'
s = App.Path
sFicDatos = s & IIf(Right$(s, 1) = "\", "", "\") & "PruebaGrid.txt"
'
With Combo1
.Clear
For i = 1 To 20
.AddItem i
Next
End With
'
OcultarControles
'
CabeceraGrid
LeerDatos
End Sub