Tema: FAQ's de VB6
Ver Mensaje Individual
  #20 (permalink)  
Antiguo 04/09/2004, 19:54
Avatar de GeoAvila
GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Simular un MSFlexGrid Editable

Pregunta:
Como Hacer un MsFlexGrid Editable

Respuesta:
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...



Aquí tienes el código:

Código:
'------------------------------------------------------------------------------
' 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 



Continua en la siguiente Página son 4 Post en Total
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila

Última edición por GeoAvila; 03/08/2005 a las 11:20