Visual Basic - msflexgrid

Life is soft - evento anual de software empresarial
 
Vista:

msflexgrid

Publicado por Moises (13 intervenciones) el 04/11/2007 03:42:54
Hola Buen día, tengo el siguiente código
'Referencia de las columnas
MSFlexgrid1.Col(0)=Clave del Producto
MSFlexgrid1.Col(1)=Cantidad
MSFlexgrid1.Col(2)=Precio Unitario, Etc.

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim m_strsql As String
Dim m_bolAyu As Boolean
Dim AltDown

AltDown = (Shift And vbAltMask) > 0

If KeyCode = vbKeyEscape Then
'Para Salir
Exit Sub
End If

If KeyCode = vbKeyReturn Then
If MSFlexGrid1.Col = 0 Then
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0) = "" Then
'Valido que no pase a la siguiente celda si no hay código del producto
Exit Sub
End If
End If
'paso a las siguientes columnas para aceptar los valores
End If

If KeyCode = vbKeyF2 Then
Call ayudaCatalogo(m_strsql, 0)
'si presiona F2 abre ventana catalogo de productos
End If

If KeyCode = vbKeyF3 Then
'Presiona F3 Elimina una fila, y recalcula los importes del MSFlex
End If
End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

'ANALIZA CADA TECLA PORESIONADA, MENOS CARATES DE CONTROL
'PARA ACEPTAR SOLO EN CAMPOS NUMERICOS NUMEROS
'Y ARMAR EL CONTENIDO DE LA CELDA, CARACTER POR CARACTER
If MSFlexGrid1.Col = 0 Then
If KeyAscii >= 32 And KeyAscii <= 127 Then MSFlexGrid1.Text = MSFlexGrid1.Text & UCase(Chr(KeyAscii))
'Acepta Alfanumericos
End If
If MSFlexGrid1.Col >= 1 And MSFlexGrid1.Col <= 4 Then
If KeyAscii = 46 Or (KeyAscii >= 48 And KeyAscii <= 57) Then MSFlexGrid1.Text = MSFlexGrid1.Text & Chr(KeyAscii)
'Acepta Numeros y el punto decimal
End If
End Sub

Private Sub MSFlexGrid1_KeyUp(KeyCode As Integer, Shift As Integer)

If MSFlexGrid1.Col = 0 Or (MSFlexGrid1.Col >= 1 And MSFlexGrid1.Col <= 4) Then
If KeyCode = vbKeyDelete Then
'Con tecla Delete Elimina el contenido de la celda
MSFlexGrid1.Text = ""
Exit Sub
End If
If KeyCode = vbKeyBack Then
If Len(MSFlexGrid1.Text) > 0 Then
'Con Tecla Back Space de Derecha a Izquierda elimina un caracter
MSFlexGrid1.Text = Left(MSFlexGrid1.Text, Len(MSFlexGrid1.Text) - 1)
End If
Exit Sub
End If
End If

End Sub

El Lío que tengo, es que para introducir algún valor en la celda actual(cuando la celda ya tiene un dato), presiono la Tecla Delete o Suprimir, para eliminar el valor de la celda, e introducir el nuevo valor, y eso lo hago en "If KeyCode = vbKeyDelete". Bien no encuentro como hacer para que, al introducir el primer caracter en la celda, se elimine el contenido de esta y acepte el nuevo valor, sin tener que presionar la tecla Delete o Suprimir.

Bueno espero no molestar y sobre todo no haber mareado con tanto rollo, le agradezco sus comentarios y sugerencias.

Moisés Fabro.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:msflexgrid

Publicado por ivan (1039 intervenciones) el 04/11/2007 08:06:51
Bueno, una forma que se me ocurre es la siguiente:

Declaración de variable a nivel de módulo:
Dim b As Boolean

En el evento EnterCell:
b = True

En el evento LeaveCell:
b = False

En el evento KeyPress (al principio):
If b = True Then
MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, MSFlexGrid1.Col) = Chr(KeyAscii)
b = False
Exit Sub
End If

Pruébalo, a ver si es lo que quieres.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:msflexgrid

Publicado por Moises (13 intervenciones) el 05/11/2007 15:58:34
Gracias por la idea!, muy amable de tu parte!, lo checo!, veré como reacciona!...Gracias...Saludos

Moisés Fabro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar