Sei sulla pagina 1di 19

Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

CAPITULO 9 – VISUAL BASIC – EL CONTROL MSFlexGrid

9.1 El control MSFlexGrid (rejilla).- El control MSFlexGrid permite desarrollar aplicaciones


que requieran un control parecido a una hoja de cálculo. La siguiente figura muestra un
control MSFlexGrid:

Fila fija Filas no fijas


Columna fija Columnas no fijas
Observar que este control tiene dos clases de filas o columnas: fijas y no fijas. Por
defecto, la fila superior y la columna situada más a la izquierda son fijas y están reservadas
para mostrar los títulos. Para definir el número de filas y columnas que tendrá este control se
utiliza las propiedades Rows y Cols, respectivamente.

9.2 Propiedades
Propiedad Descripción
AllowUserResizing Esta propiedad permite redimensionar el ancho de las columnas o la altura de las
filas. Para ello, en la columna o fila fija, situar el puntero del Mouse sobre la línea
divisoria de las celdas y arrastrar hasta obtener el tamaño adecuado. La
propiedad AllowUserResizing presenta estas opciones:
0-flexResizeNone El usuario no puede cambiar el tamaño de las celdas.
1-flexResizeColumns El usuario sólo puede cambiar el ancho de las columnas.
2-flexResizeRows El usuario sólo puede cambiar la altura de las filas.
3-flexResizeBoth El usuario puede cambiar el tamaño de filas y columnas.
Cols Determina el número total de columnas que tendrá el control MSFlexGrid.
Rows Determina el número total de filas que tendrá el control MSFlexGrid.
FixedCols Define el número total de columnas fijas no desplazables que tendrá el control.
FixedRows Determina el número total de filas fijas no desplazables que tendrá el control.
FormatString Permite establecer en tiempo de diseño el ancho de las columnas, las
alineaciones y el texto de las filas y columnas fijas del control MSFlexGrid. La
propiedad FormatString está compuesta por dos segmentos separados por
barras verticales (|). El texto entre dos barras define una nueva columna o fila y
puede contener también los siguientes caracteres de alineación:
< Alinea la columna a la izquierda.
A Centra la columna.
> Alinea la columna a la derecha.
ColWidth Permite ajustar el ancho de una celda. Especificar en twips el nuevo ancho.
RowHeight Permite ajustar la altura de una celda. Especificar en twips la nueva altura de la
celda. Por ejemplo, las siguientes instrucciones amplían la segunda fila y la
tercera columna de la rejilla a 1500 twips:
Número de la fila cuyo tamaño es modificado.
MSFlexGrid1.RowHeight(2) = 1500
MSFlexGrid1.ColWidth(3) = 1500 Medidas en twips.
Número de la columna cuyo tamaño es modificado.

Ing. Hermas Herrera Callejas Página: 1 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

ScrollBars Permite utilizar barras de desplazamiento para tener acceso a cualquier parte del
control MSFlexGrid. Para ello, asignar uno de estos valores a la propiedad
ScrollBars:
0-FlexScrollBarNone Hace que la rejilla no tenga barra de desplazamiento.
1-FlexScrollBarHorizontal Hace que la rejilla tenga una barra de desplazamiento
horizontal.
2-FlexScrollBarVertical Hace que la rejilla tenga una barra de desplazamiento
vertical.
3-FlexScrollBarBoth Hace que la rejilla tenga ambas barras de
desplazamiento.
SelectionMode Permite restringir la forma en que serán seleccionadas las celdas. Para ello,
asignar uno de estos valores a la propiedad SelectionMode:
0-FlexSelectionFree Permite seleccionar celdas libremente, como en una
hoja de cálculo.
1-FlexSelectionByRow Fuerza la selección por filas.
2-FlexSelectionByColumn Fuerza la selección por columnas.
FillStyle Determina si al establecer la propiedad TextMatrix o una de las propiedades de
formato de celda del control MSFlexGrid los cambios se aplican a todas las
celdas seleccionadas. La propiedad FillStyle presenta estas opciones:
0-FlexFillSingle Los cambios afectan sólo a la celda activa.
1-FlexFillRepeat Los cambios afectan a todas las celdas seleccionadas.
9.3 Sucesos
Suceso Descripción
EnterCell Este suceso se produce cuando se selecciona una nueva celda.
LeaveCell Este suceso se produce cuando se abandona una celda.

9.4 Introducir datos en una celda.- La intersección de una fila y una columna conforman
una celda. Para introducir un valor en una celda se utiliza la propiedad TextMatrix. Por
ejemplo, para introducir la palabra “Préstamo” en la celda 0, 2 (fila 0, columna 2) escribir la
siguiente instrucción de programa:
MSFlexGrid1.TextMatrix(0,2) = ”Préstamo”
Para introducir el número 3250 en la celda 3, 2 (fila 3, columna 2) escribir la siguiente
instrucción:
MSFlexGrid1.TextMatrix(3, 2) = 3250

9.4.1 Selección de celdas.- Para realizar modificaciones en una celda o en un rango de


celdas, lo primero que se debe hacer es seleccionarlas utilizando código de programa.
Para seleccionar una única celda se utiliza las propiedades Row y Col. En la propiedad
Row asignar el número de la fila y en la propiedad Col el número de columna. La celda
seleccionada será la intersección de la fila y la columna especificadas. Por ejemplo, para
seleccionar la celda 3, 2 utilizar estas instrucciones:
MSFlexGrid1.Row = 3
MSFlexGrid1.Col = 2
La siguiente figura muestra la selección realizada:

Para seleccionar un rango de celdas, primero especificar las coordenadas de la celda


superior izquierda utilizando las propiedades Row y Col. Luego, especificar las coordenadas

Ing. Hermas Herrera Callejas Página: 2 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

de la celda inferior derecha del rango utilizando las propiedades RowSel y ColSel. Por
ejemplo, las siguientes instrucciones seleccionarán un rango de 8 celdas (celda 3, 2 a 6, 3):
MSFlexGrid1.Row = 3
MSFlexGrid1.Col = 2
MSFlexGrid1.RowSel = 6
MSFlexGrid1.ColSel = 3
La siguiente figura muestra la selección anterior:

Observar que, de todas las celdas seleccionadas, la primera no aparece resaltada. Esta
se distingue del resto porque también es la celda activa.
Para restringir la forma en que se seleccionan las celdas utilizar la propiedad
SelectionMode en la Ventana Propiedades.

9.4.2 Formato de celdas.- Utilice la propiedad FillStyle para determinar si un formato se ha


de aplicar a la celda activa o a todas las celdas seleccionadas. Por ejemplo, para dar
formato a un rango de celdas, incluya la siguiente instrucción de programa después de
haber seleccionado el rango:
MSFlexGrid1.FillStyle = flexFillRepeat
El valor flexFillRepeat permite dar formato simultáneo a más de una celda. Después de
ejecutar esta instrucción, proceda a dar formato a las celdas seleccionadas. El valor por
defecto, flexFillSingle, permite dar formato a una única celda.
Las siguientes propiedades permiten dar formato a las celdas seleccionadas:
Propiedad Formato
CellFontBold Establece el estilo negrita al texto de las celdas seleccionadas. Ejemplo:
MSFlexGrid1.CellFontBold = True
CellFontItalic Establece el estilo cursiva al texto de las celdas seleccionadas. Ejemplo:
MSFlexGrid1.CellFontItalic = True
CellFontUnderlíne Establece el estilo subrayado al texto de las celdas seleccionadas. Ejemplo:
MSFlexGrid1.CellFontUnderline = True
CellAlignment Permite alinear el texto de las celdas seleccionadas. Esta propiedad puede
adoptar los siguientes valores:
Valor Descripción
0 Izquierda Arriba
1 Izquierda Centro
2 Izquierda Abajo
3 Centro Arriba
4 Centro Centro
5 Centro Abajo
6 Derecha Arriba
7 Derecha Centro
8 Derecha Abajo
9 General (cadenas Izquierda Centro, números Derecha Centro). Ejemplo:
MSFlexGrid1.CellAlignment = 7
CellFontName Establece el estilo de letra que se va a usar en las celdas seleccionadas. Ejm.
MSFlexGrid1.CellFontName = ”Curier New”

Ing. Hermas Herrera Callejas Página: 3 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

CellFontSize Establece el tamaño de la fuente, en puntos. Ejemplo:


MSFlexGrid1 .CellFontSize = 14
CellForeColor Establece el color del texto de las celdas seleccionadas. Ejemplo:
MSFlexGrid1.CellForeColor = “Red”
CellBackColor Establece el color del fondo de las celdas seleccionadas. Ejemplo:
MSFIexGrid1.CellBackColor = “Blue”
ColAlignment Permite alinear una columna entera. Por ejemplo, la siguiente sentencia alinea
hacia la derecha el texto de la segunda columna:
MSFlexGrid1.ColAlignment(1) = 7

9.5 Despliegue de información en las celdas.- Para ver con detalle la manera de utilizar
el control MSFlexGrid, se desarrollará una aplicación que calcule la cantidad requerida como
pagos periódicos para amortizar un préstamo en un periodo de tiempo especificado. Los
datos que hay que introducir son el Capital prestado, el tipo de interés por periodo y el plazo
(número de cuotas a pagar). Este programa supone que todos los plazos son iguales.
El cálculo se basa en la fórmula:
Ci (1  i ) N
P
(1  i ) N  1
Donde:
P = pago periódico (cuota)
i = tipo de interés periódico
C = préstamo (Capital prestado)
N = número de pagos (plazo)
Diseñar una interfaz similar a la siguiente ilustración:

1. Hacer clic en el comando ‘Nuevo proyecto’ del menú Archivo para crear una nueva
aplicación.
2. Guardar el formulario con nombre Plandepagos.frm y la aplicación con nombre
Plandepagos.vbp.
3. Hacer clic en el comando Componentes del menú Proyecto. Pulsar sobre la ficha
Controles del cuadro de diálogo Componentes
4. Introducir una marca de verificación en el elemento Microsoft FlexGríd Control 6.0 y hacer
clic en Aceptar.

Ing. Hermas Herrera Callejas Página: 4 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

5. Añadir un control MSFlexGrid al formulario y ajustar el tamaño del control MSFlexGrid.


6. Con el control MSFlexGrid seleccionado asignar las siguientes propiedades:
Propiedad Valor
Name Rejilla
AllowUserResizing 1- FlexResizeColumns
Cols 7
FormatString " | > Capital|>Interes| >Amortización|>Cuotas| |"
Rows 20
ScrollBars 3-FlexScrollBarBoth
7. Añadir tres controles Label y tres controles TextBox al formulario. Asignar estas
propiedades:
Control Propiedad Valor
Form Name Form1
Caption Plan de pagos
Label Name Label1
Caption Capital
Label Name Label2
Caption Nro de periodos (Plazo)
Label Name Label3
Caption Interés por periodo
TextBox Name Capital
Text
TextBox Name Periodo
Text
TextBox Name Interés
Text
Completar a 9 los controles Image en el formulario y asignarles los siguientes nombres:
Boton Salir SalirB

SalirS CalcularB CalcularI CalcularS Calcular


Observar que hay dos controles Image con el mismo nombre (Botón). Estos forman
parte de un array de controles.
Hacer clic en el control Image Botón(0). En la propiedad Picture hacer clic en el
botón del lado derecho. Buscar y seleccionar el gráfico CalcularIn.bmp y hacer clic en Abrir.
Asignar los siguientes gráficos a cada uno de los controles Image:

Ing. Hermas Herrera Callejas Página: 5 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

CalcularIn.bmp Salir.bmp SalirBaj.bmp SalirSob.bmp Calcular.bmp CalcularBaj.bmp CalcularSob.bmp

El siguiente cuadro resume las propiedades asignadas a cada uno de los controles:
Control Propiedad Valor
Image Name Boton
Index 0
Picture CalcularIn.bmp
Image Name Boton
Index 1
Picture Salir.bmp
Image Name Salir
Picture Salir.bmp
Visible False
Image Name SalirB
Picture SalirBaj.bmp
Visible False
Image Name SalirS
Picture SalirSob.bmp
Visible False
Image Name Calcular
Picture Calcular.bmp
Visible False
Image Name CalcularB
Picture CalcularBaj.bmp
Visible False
Image Name CalcularS
Picture CalcularSob.bmp
Visible False
Image Name CalcularI
Picture CalcularIn.bmp
Visible False
Luego de asignar las propiedades a cada uno de los controles Image, seleccionar el
control MSFlexGrid y ampliarlo de modo que COPE el ancho del formulario, cubriendo
algunos controles Image que, al no ser visibles en ejecución, no serán afectados en su
funcionalidad. El formulario quedará similar a la siguiente ilustración:

Asociar un procedimiento al formulario.


1. Hacer doble clic en el formulario y digitar el siguiente código:
Dim Cap, i, n, pag As Double

Ing. Hermas Herrera Callejas Página: 6 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

Dim sw1, sw2, sw3 As Boolean


Private Sub Form_Load()
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
End Sub
Asociar procedimientos al cuadro de texto Capital accionados por los sucesos Change
y KeyPress. Sólo debe permitir el ingreso de valores numéricos en el cuadro de texto Capital
y al presionar la tecla Enter, el cursor debe ubicarse en la casilla Periodo.
1. Hacer doble clic en el cuadro de texto Capital. La ventana de código abre el
procedimiento Capital_change.
2. Digitar el siguiente procedimiento:
Private Sub Capital_Change()
If IsNumeric(Capital.Text) And Val(Capital.Text) >= 0 Then
Cap = Val(Capital.Text)
sw1 = True
If sw1 And sw2 And sw3 Then
Boton(0).Picture = Calcular.Picture
End If
Else
Boton(0).Picture = CalcularI.Picture
MsgBox "Introduzca solo números positivos", , "Error de ingreso"
sw1 = False
End If
End Sub
Luego seleccionar el suceso KeyPress y digitar el siguiente código
Private Sub Capital_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Periodo.SetFocus
End If
End Sub
Asociar procedimientos al cuadro de texto Periodo accionados por los sucesos
Change y KeyPress. Sólo se debe permitir el ingreso de valores numéricos en el cuadro de
texto Periodo y al presionar la tecla Enter, el cursor debe ubicarse en la casilla Interes.
1. Hacer doble en el cuadro de texto Periodo. La ventana de código abre el procedimiento
Periodo_Change.
2. Digitar el siguiente procedimiento:
Private Sub Periodo_Change()
If IsNumeric(Periodo.Text) And Val(Periodo.Text) >= 0 Then
n = Val(Periodo.Text)
sw2 = True
If sw1 And sw2 And sw3 Then
Boton(0).Picture = Calcular.Picture
End If
Else
Boton(0).Picture = CalcularI.Picture
MsgBox "Introduzca solo números positivos", , "Error de ingreso"
sw2 = False
End If
End Sub
Luego seleccionar el suceso KeyPress y digitar el siguiente procedimiento
Private Sub Periodo_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Interes.SetFocus
End If
End Sub

Ing. Hermas Herrera Callejas Página: 7 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

Asociar procedimientos al cuadro de texto Interés accionados por los sucesos Change
y KeyPress. Sólo debe permitir el ingreso de valores numéricos en el cuadro de texto Interés
y al presionar la tecla Enter, el cursor debe ubicarse en la casilla Capital.
1. Hacer doble en el cuadro de texto Interés. La ventana de código abre el procedimiento
Interés_Change.
2. Digitar el siguiente procedimiento:
Private Sub Interes_Change()
If IsNumeric(Interes.Text) And Val(Interes.Text) >= 0 Then
i = Val(Interes.Text) / 100
sw3 = True
If sw1 And sw2 And sw3 Then
Boton(0).Picture = Calcular.Picture
End If
Else
Boton(0).Picture = CalcularI.Picture
MsgBox "Introduzca solo números positivos", , "Error de ingreso"
sw3 = False
End If
End Sub
Luego seleccionar el suceso KeyPress y digitar el siguiente código
Private Sub Interes_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Capital.SetFocus
End If
End Sub
Asociar un procedimiento al array de controles Botón accionado por el suceso
MouseMove. Cuando el usuario desplace el puntero del mouse sobre uno de estos dos
botones, este procedimiento se ejecutará y cambiará el gráfico del botón.
1. Hacer doble clic sobre uno de los controles Botón.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y seleccionar el
suceso MouseMove.
3. Digitar el siguiente procedimiento:
Private Sub Boton_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case Index
Case 0
If Boton(0).Picture = Calcular.Picture Then
Boton(0).Picture = CalcularS.Picture
End If
Boton(1).Picture = Salir.Picture
Case 1
If Boton(0).Picture = CalcularS.Picture Then
Boton(0).Picture = Calcular.Picture
End If
Boton(1).Picture = SalirS.Picture
End Select
End Sub
Asociar un procedimiento al formulario accionado por el suceso MouseMove. Cuando
el usuario desplace el puntero del mouse sobre el formulario, este procedimiento se ejecutará
y cambiará los gráficos de los controles Botón.
1. Hacer doble clic en el formulario.

Ing. Hermas Herrera Callejas Página: 8 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

2. En la ventana de código, desplegar el cuadro de lista Procedimientos y seleccionar el


suceso MouseMove.
3. Digitar el siguiente procedimiento:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Boton(0).Picture = CalcularS.Picture Then
Boton(0).Picture = Calcular.Picture
End If
Boton(1).Picture = Salir.Picture
End Sub
Asociar un procedimiento al array de controles Botón accionado por el suceso
MouseDown. Cuando el usuario sitúe el puntero del mouse sobre el botón Botón(0) o
Botón(1) y pulse el botón izquierdo del mouse, este procedimiento se ejecutará cambiando el
gráfico del control bajo el puntero y se es Boton(0) calculará y desplegará el cuadro de
amortizaciones además de cambiar el puntero del mouse mientras dura el cálculo.
1. Hacer doble clic sobre uno de los controles Botón.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y seleccionar el
suceso MouseDown.
3. Digitar el siguiente código:
Private Sub Boton_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim fila As Integer
Dim sumaamort, sumacuotas, amort, Intere, sumaint As Double
Cap = Val(Capital.Text)
Select Case Index
Case 0
If Boton(0).Picture = CalcularS.Picture Then
Boton(0).Picture = CalcularB.Picture
MousePointer = 11
limpiarrejilla
pag = (Cap * i * (1 + i) ^ n) / ((1 + i) ^ n - 1)
sumaint = 0: sumaamort = 0: sumacuotas = 0
With Rejilla
For fila = 1 To n
.TextMatrix(fila, 0) = fila
.TextMatrix(fila, 1) = Format(Cap, "###,##0.00")
Intere = Cap * i
.TextMatrix(fila, 2) = Format(Intere, "#,##0.00")
amort = pag - Intere
.TextMatrix(fila, 3) = Format(amort, "#,##0.00")
.TextMatrix(fila, 4) = Format(pag, "#,##0.00")
Cap = Cap - amort
sumaint = sumaint + Intere
sumaamort = sumaamort + amort
sumacuotas = sumacuotas + pag
Next fila
.TextMatrix(fila, 2) = Format(sumaint, "##,##0.00")
.TextMatrix(fila, 3) = Format(sumaamort, "##,##0.00")
.TextMatrix(fila, 4) = Format(sumacuotas, "###,##0.00")
End With
MousePointer = 0
End If
Case 1
Boton(1).Picture = SalirB.Picture

Ing. Hermas Herrera Callejas Página: 9 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

End Select
End Sub
Asociar otro procedimiento al array de controles Botón accionado por el suceso
MouseUp. Cuando el usuario sitúe el puntero del mouse sobre el botón Botón(0) o Botón(1),
pulse y suelte el botón izquierdo del mouse, se ejecutará este procedimiento y cambiará el
gráfico del control Botón(0) o finalizará la ejecución del programa.
1. Hacer doble clic sobre uno de los controles Botón.
2. En la ventana de código, desplegar el cuadro de lista Procedimientos y seleccionar el
suceso MouseUP.
3. Digitar el siguiente código:
Private Sub Boton_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case Index
Case 0
If Boton(0).Picture = CalcularB.Picture Then
Boton(0).Picture = Calcular.Picture
End If
Case 1
End
End Select
End Sub
Digitar el procedimiento LimpiarRejilla. Este procedimiento limpiará todos los datos de
las celdas en el control MSFlexGrid.
Public Sub limpiarrejilla()
With Rejilla
.Rows = n + 4
.Row = 1
.Col = 0
.RowSel = .Rows - 1
.ColSel = .Cols - 1
.FillStyle = flexFillRepeat
.Text = ""
End With
End Sub
Presionar la tecla F5 para ejecutar el programa. Introducir el Capital, Nro. de periodos
(Plazo) y el Interés por periodo.

Ing. Hermas Herrera Callejas Página: 10 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

9.6 Edición de datos en las celdas.- En el programa anterior se ha utilizado el control


MSFlexGrid para mostrar datos, pero observar que los datos contenidos en las celdas no
pueden ser editados. Esta limitación puede superarse fácilmente integrando el control
TextBox con el control MSFlexGrid.
Para ello, se usan las propiedades CellWidth, CellHeight, CellTop y CeIlLeft del control
MSFlexGrid. Las propiedades CellWidth, CellHeight proporcionan información sobre el ancho
y alto de la celda seleccionada en el control MSFlexGrid; mientras que las propiedades
CellTop y CellLeft proporcionan información sobre la ubicación de la celda.
Si se asigna a un control TextBox las propiedades de tamaño y ubicación de la celda
seleccionada, el control se situará sobre ella de manera tal que el usuario tendrá la impresión
de que está editando la celda directamente.
Una vez situado el control TextBox sobre la celda, el contenido de la celda se copia
sobre el control TextBox. Cuando el usuario se mueve a otra celda, se copia el contenido del
control TextBox a la celda que abandona y después se coloca el control TextBox sobre la
celda que se acaba de seleccionar.
La siguiente aplicación mostrará los pasos para integrar el control TextBox con el
control MSFlexGrid. El programa debe permitir el mantenimiento de los datos almacenados
en el archivo de alumnos cuyo nombre se definió al crearlo en una práctica anterior.
Seguir estos pasos:
1. Hacer clic en el comando Nuevo proyecto del menú Archivo para crear una nueva
aplicación.
2. Añadir cinco controles CommandButton y un control TextBox en el formulario.
3. Hacer clic en el comando Componentes del menú Proyecto. Visual Basic muestra el
cuadro de diálogo Componentes.
4. Hacer clic en el cuadro de verificación a la izquierda del elemento Microsoft Common
Dialog Control 6.0 y del elemento Microsoft FlexGrid Control 6.0, luego hacer clic en
Aceptar.
5. En el cuadro de herramientas, hacer doble clic sobre el control MSFlexGrid. En el
formulario, ajustar el tamaño del control MSFlexGrid.
6. Añadir un control CommonDialog y tres controles Label al formulario
7. Asignar las siguientes propiedades a cada uno de los controles:
Control Propiedad Valor .
Form Name MantDatos
Caption Mantenimiento del archivo de alumnos
TextBox Name Campo
BorderStyle 0-None
Text “”
Visible False
CommandButton Name Corrsultar
Caption Consultar
CommandButton Name Guardar
Caption Guardar
CommandButton Name Modificar
Caption Modificar
CommandButton Name Eliminar
Caption Eliminar
CommandButton Name Salir
Caption Salir
MSFlexGrid Name Rejilla
AllowUserResizing 1 – flexResizeColumns

Ing. Hermas Herrera Callejas Página: 11 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

Rows 25
Cols 12
Enabled False
FixedRows 1
FixedCols 0
FormatString Cédula |<Paterno |<Materno |<Nombres |
|<Dirección |<F. de Nacim |<Gén |<Sw |
ScrollBars 3-flexScrollBarBoth
CommonDialog Name Abrir
Label Name Mensaje1
Caption ““
AutoSize True
Label Name Mensaje2
Caption ““
AutoSize True
Label Name Mensaje3
Caption ““
AutoSize True
Hacer Clic en el menú Proyecto y seleccionar el Sub-menú Agregar Módulo. Cuando el
Visual Basic despliegue el cuadro de diálogo Agregar módulo, hacer clic en el comando Abrir.
En la ventana que abre el Visual Basic, digitar la estructura del archivo de alumnos con
nombre de registro Reg_Alumnos, al final definir la variable Alumnos de tipo Reg_Alumnos
para que tenga la misma estructura de datos de acuerdo al siguiente detalle
Type Reg_Alumnos
Cédula As String * 10
Paterno As String * 20
Materno As String * 20
Nombres As String * 30
Dirección As String * 40
Fecha_Nac As Date
Género As String * 1
SW As String * 1
End Type
Global Alumnos As Reg_Alumnos
Guardar el formulario con el nombre MantDatos.frm y la aplicación con el nombre
MantDatos.vbp. La interfaz debe tener el siguiente aspecto:

Ing. Hermas Herrera Callejas Página: 12 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

Asociar un procedimiento a cada uno de los controles del formulario:


1. Hacer doble clic sobre el formulario. La ventana de código abre el procedimiento
Form_Load.
2. Digitar el siguiente código:
Dim AuxCéd, AuxCédula As String
Dim Fila, XFila As Integer
Private Sub Form_Load()
'Sitúa al formulario en el centro de la pantalla
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
'lnhabilita los botones Ingresar, Modificar y eliminar
Guardar.Enabled = False
Modificar.Enabled = False
Eliminar.Enabled = False
'Abre el archivo de alumnos, cuyo nombre se definió al crearlo en una práctica anterior
'El nombre de registro es Alumnos y se utiliza en la sentencia Open para abrir el archivo
Abrir.ShowOpen
Open Abrir.FileName For Random As #1 Len = Len(Alumnos)
End Sub
Asociar un procedimiento al botón de comando Consultar accionado por el suceso
Click. Cuando el usuario haga clic en este botón, los datos del archivo de alumnos, cuyo
nombre se definió al crearlo en una práctica anterior, deben aparecer en las celdas del
control MSFlexGrid.
1. Hacer doble clic en el botón de comando Consultar. La ventana de código muestra el
procedimiento Consultar_Click.
2. Digitar el siguiente código:
Private Sub Consultar_Click()
MantDatos.Caption = "Consulta de datos"
Mensaje1.Caption = "Haga clic con el botón izquierdo del mouse sobre un registro para eliminarlo."
Mensaje2.Caption = "Haga clic con el botón derecho del mouse para añadir un registro."
Mensaje3.Caption = "Presione la tecla Alt y haga clic sobre un campo para realizar modificaciones."
Guardar.Enabled = False 'Inhabilita el botón de comando Guardar
Modificar.Enabled = False 'Inhabilita el botón de comando Modificar
Eliminar.Enabled = False 'Inhabilita el botón de comando Eliminar
Rejilla.Enabled = True 'Habilita el control MSFlexgrid
'Líneas que muestran los datos del archivo de alumnos en las celdas del control MSFlexGrid.
TotalRegistros = LOF(1) \ Len(Alumnos)
Fila = 0
If TotalRegistros <> 0 Then
LimpiarRegistros 'Llama al procedimiento LimpiarRegistros
With Rejilla
For i = 1 To TotalRegistros
Get #1, i, Alumnos
If Alumnos.SW = "1" Then
Fila = Fila + 1
.TextMatrix(Fila, 0) = Alumnos.Cédula
.TextMatrix(Fila, 1) = Alumnos.Paterno
.TextMatrix(Fila, 2) = Alumnos.Materno
.TextMatrix(Fila, 3) = Alumnos.Nombres
.TextMatrix(Fila, 4) = Alumnos.Dirección
.TextMatrix(Fila, 5) = Alumnos.Fecha_Nac
.TextMatrix(Fila, 6) = Alumnos.Género
.TextMatrix(Fila, 7) = Alumnos.SW

Ing. Hermas Herrera Callejas Página: 13 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

If Fila >= 21 Then .AddItem (" ") 'Añade una nueva fila al control MSFlexGrid
End If
Next i
Campo.Text = .TextMatrix(1, 0)
End With
Else
Exit Sub
End If
End Sub
Para el mantenimiento del archivo de alumnos, cuyo nombre se definió al crearlo en
una práctica anterior, el usuario debe modificar, ingresar y eliminar registros. Para eliminar un
registro, el usuario debe seleccionar el registro situando el puntero del mouse sobre el
registro y haciendo clic sobre él. Seguidamente, debe hacer clic en el botón Eliminar.
Para ingresar un nuevo registro, el usuario debe hacer clic con el botón derecho del
mouse sobre el control MSFlexGrid (el control Campo debe aparecer enfocado después del
último registro), ingresar los datos del nuevo registro y hacer clic en el botón Guardar.
Para modificar los campos de un registro, el usuario debe mantener presionada la
tecla Alt, situar el puntero del mouse sobre uno de los campos de un determinado registro y
hacer clic. Luego de realizar las modificaciones en el campo y presionar la tecla Enter, el
usuario debe hacer clic en el botón Modificar.
Asociar un procedimiento al control MSFlexGrid accionado por el suceso MouseUp.
Este procedimiento debe responder a las siguientes acciones realizadas por el usuario: un
clic con el botón izquierdo del mouse sobre un registro, un clic con el botón derecho del
mouse sobre el control MSFlexGrid y un clic sobre un campo mientras la tecla Alt está
presionada.
Si el usuario hace clic con el botón izquierdo del mouse sobre un registro, el registro
debe quedar seleccionado y la variable AuxCod debe almacenar el código del mismo. Si el
usuario hace clic con el botón derecho del mouse sobre el control MSFlexGrid, el programa
debe seleccionar la celda ubicada más a la izquierda después del último registro. Si el
usuario mantiene presionada la tecla Alt y pulsa el botón izquierdo del mouse sobre una de
las celdas del control MSFlexGrid, el programa debe seleccionar la celda, guardar el código
del registro que contiene a la celda en la variable AuxCodigo y el número de la fila en la
variable XFila.
1. Hacer doble clic en el control MSFlexGrid. En la ventana de código desplegar el cuadro de
lista Procedimientos y seleccionar el suceso MouseUp. La ventana de código abre el
procedimiento Rejilla_MouseUp.
2. Digitar el siguiente código:
Private Sub Rejilla_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Mensaje2.Caption = " "
Mensaje3.Caption = " "
With Rejilla
'Si se pulsó el botón izquierdo del mouse.
If Button = 1 Then
MantDatos.Caption = "Eliminar registros"
Mensaje1.Caption = "Haga clic en el botón Eliminar para borrar el registro seleccionado."
Guardar.Enabled = False 'Inhabilita el botón de comando Guardar
Modificar.Enabled = False 'Inhabilita el botón de comando Modificar
Eliminar.Enabled = True 'Habilita el botón de comando Eliminar
.Row = .MouseRow: .Col = 0 'Selecciona la fila con el registro que será eliminado.
.RowSel = .MouseRow: .ColSel = .Cols - 1
AuxCéd = .Text 'La Cédula del registro se almacena en la variable AuxCéd
Ing. Hermas Herrera Callejas Página: 14 de 19
Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

End If
If Button = 2 Then 'Se pulso el botón derecho del mouse.
MantDatos.Caption = "Ingreso de datos"
Mensaje1.Caption = "Ingrese los datos en todos los campos y haga clic en el botón Guardar"
Guardar.Enabled = True 'Habilita el botón de comando Guardar
Modificar.Enabled = False 'Inhabilita el botón de comando Modificar
Eliminar.Enabled = False 'Inhabilita el botón de comando Eliminar
'Selecciona la celda a partir de la cual se ingresarán los datos del nuevo registro.
.Row = Fila + 1
.Col = 0
End If
If Button = 1 And Shift = 4 Then 'Se pulsó la tecla Alt y el botón izquierdo del mouse.
MantDatos.Caption = "Modificar registros"
Mensaje1.Caption = "Presione la tecla Enter para confirmar el cambio realizado"
Mensaje2.Caption = " "
Mensaje3.Caption = " "
Guardar.Enabled = False 'Inhabilita el botón de comando Guardar
Modificar.Enabled = True 'Habilita el botón de comando Modificar
Eliminar.Enabled = False 'Inhabilita el botón de comando Eliminar
.Row = .MouseRow 'Selecciona la celda en la que se hizo clic.
.Col = .MouseCol
AuxCédula = .TextMatrix(.Row, 0) 'La Cédula del registro se almacena en variable AuxCédula.
'El número de la fila en la que se encuentra la celda seleccionada es almacenado en la variable XFila.
XFila = .Row
End If
End With
End Sub
Asociar otro procedimiento al control MSFlexGrid accionado por el suceso EnterCell.
El suceso EnterCell tiene lugar cada vez que se selecciona una nueva celda. El
procedimiento deberá:
1. Borrar el contenido del cuadro de texto Campo.
2. Ocultar el cuadro de texto Campo.
3. Situar el cuadro de texto Campo sobre la celda seleccionada y ajustar su tamaño al de ésta.
4. Asignar el contenido de la celda seleccionada a la propiedad Text del cuadro de texto Campo.
5. Visualizar el cuadro de texto Campo.
6. Mover el enfoque al cuadro de texto Campo.
Seguir estos pasos para asociar un procedimiento al control MSFIexGrid accionado
por el suceso EnterCell:
1. Hacer doble clic en el control MSFIexGríd. En la ventana de código desplegar el cuadro
de lista Procedimientos y seleccionar el suceso EnterCell. La ventana de código abre el
procedimiento Rejilla_EnterCell.
2. Digitar el siguiente código:
Private Sub Rejilla_EnterCell()
Campo.Text = " " 'Borra el contenido del control TextBox
Campo.Visible = True 'Oculta el control TextBox
Campo.Top = Rejilla.Top + Rejilla.CellTop 'Sitúa el control TextBox sobre la celda seleccionada
Campo.Left = Rejilla.Left + Rejilla.CellLeft
'Ajusta el tamaño del control TextBox al tamaño de la celda seleccionada
Campo.Width = Rejilla.CellWidth
Campo.Height = Rejilla.CellHeight
'Asigna el contenido de la celda seleccionada a la propiedad Text del control TextBox
Campo.Text = Rejilla.Text

Ing. Hermas Herrera Callejas Página: 15 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

Campo.Visible = True 'Visualiza el control TextBox


Campo.SetFocus
End Sub
Asociar un procedimiento más al control MSFlexGrid accionado por el suceso
LeaveCell. El suceso LeaveCell tiene lugar cada vez que una celda es abandonada,
cambiando el enfoque a otra celda. El procedimiento deberá copiar el contenido del cuadro
de texto Campo sobre la celda activa antes de ser abandonada.
1. Hacer doble clic en el control MSFlexGrid. En la ventana de código desplegar el cuadro
de lista Procedimientos y seleccionar el suceso LeaveCell. La ventana de código abre el
procedimiento Rejilla_LeaveCell.
2. Digitar el siguiente código:
Private Sub Rejilla_LeaveCell()
'Asigna el contenido del control TextBox a la celda activa antes de ser abandonada.
Rejilla.Text = Campo.Text
End Sub
Asociar un procedimiento al cuadro de texto Campo accionado por el suceso
KeyPress. Cuando el usuario introduzca los datos en este control y presione la tecla Enter,
este procedimiento deberá seleccionar la celda contigua a la derecha de la celda activa
1. Hacer doble clic en el cuadro de texto Campo. En la ventana de código, desplegar el
cuadro de lista Procedimientos y seleccionar el suceso KeyPress. La ventana de código
abre el procedimiento Campo_KeyPress.
2. Digitar el siguiente código:
Private Sub Campo_KeyPress(KeyAscii As Integer)
'Selecciona la celda contigua a la derecha de la celda activa cuando la tecla Enter es presionada.
If KeyAscii = 13 Then
If Campo.Text <> " " Then
Rejilla.Row = Rejilla.RowSel
Rejilla.Col = Rejilla.ColSel + 1
End If
End If
End Sub
Asociar un procedimiento al botón de comando Guardar accionado por el suceso
Click. Cuando el usuario haga clic en este botón, los datos ingresados en la fila Fila + 1
deben ser almacenados en el archivo de alumnos, cuyo nombre se definió en una práctica
anterior.
1. Hacer doble clic en el botón de comando Guardar. La ventana de código muestra el
procedimiento Guardar_Click.
2. Digitar el siguiente procedimiento:
Private Sub Guardar_Click()
'lngresa nuevos registros en el archivo de alumnos cuyo nombre se eligió al crearlo anteriormente.
Alumnos.Cédula = Rejilla.TextMatrix(Fila + 1, 0)
Alumnos.Paterno = Rejilla.TextMatrix(Fila + 1, 1)
Alumnos.Materno = Rejilla.TextMatrix(Fila + 1, 2)
Alumnos.Nombres = Rejilla.TextMatrix(Fila + 1, 3)
Alumnos.Dirección = Rejilla.TextMatrix(Fila + 1, 4)
Alumnos.Fecha_Nac = Rejilla.TextMatrix(Fila + 1, 5)
Alumnos.Género = Rejilla.TextMatrix(Fila + 1, 6)
Alumnos.SW = "1"
TotalRegistros = LOF(1) \ Len(Alumnos)
Put #1, TotalRegistros + 1, Alumnos
Consultar_Click

Ing. Hermas Herrera Callejas Página: 16 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

Guardar.Enabled = False
End Sub
Asociar un procedimiento al botón de comando Modificar accionado por el suceso
Click. Cuando el usuario haga clic en este botón, los datos modificados de una determinada
fila del control MSFlexGrid deben ser almacenados en el archivo de alumnos cuyo nombre se
definió al crearlo en una práctica anterior.
1. Hacer doble clic en el botón de comando Modificar. La ventana de código muestra el
procedimiento Modificar_Click.
2. Digitar el siguiente procedimiento:
Private Sub Modificar_Click()
Dim i As Integer
Dim encontrado As Boolean
MantDatos.Caption = "Modificar datos"
For i = 1 To LOF(1) \ Len(Alumnos)
Get #1, i, Alumnos
If Trim(Alumnos.Cédula) = Trim(AuxCédula) And Alumnos.SW = "1" Then
encontrado = True
posición = i
Exit For
End If
Next i
If encontrado Then
Alumnos.Cédula = Rejilla.TextMatrix(XFila, 0)
Alumnos.Paterno = Rejilla.TextMatrix(XFila, 1)
Alumnos.Materno = Rejilla.TextMatrix(XFila, 2)
Alumnos.Nombres = Rejilla.TextMatrix(XFila, 3)
Alumnos.Dirección = Rejilla.TextMatrix(XFila, 4)
Alumnos.Fecha_Nac = Rejilla.TextMatrix(XFila, 5)
Alumnos.Género = Rejilla.TextMatrix(XFila, 6)
Put #1, posición, Alumnos
Consultar_Click
End If
Modificar.Enabled = False
End Sub
Asociar un procedimiento al botón de comando Eliminar accionado por el suceso Click.
Cuando el usuario haga clic en este botón, el registro seleccionado debe ser eliminado del
archivo de alumnos, cuyo nombre se definió al crearlo en una práctica anterior.
1. Hacer doble clic en el botón de comando Eliminar. La ventana de código muestra el
procedimiento Eliminar_Click().
2. Digitar el siguiente procedimiento:
Private Sub Eliminar_Click()
Dim i, posición As Integer
Dim encontrado As Boolean
MantDatos.Caption = "Eliminar datos"
encontrado = False
For i = 1 To LOF(1) \ Len(Alumnos)
Get #1, i, Alumnos
If Trim(Alumnos.Cédula) = Trim(AuxCéd) Then
encontrado = True
posición = i
Exit For
End If

Ing. Hermas Herrera Callejas Página: 17 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

Next i
If encontrado Then
Get #1, posición, Alumnos
Alumnos.SW = "0"
Put #1, posición, Alumnos
Consultar_Click
End If
Eliminar.Enabled = False 'lnhabilita el botón Eliminar
End Sub
El procedimiento LimpiarRegistros tiene la función de limpiar las celdas del control
MSFlexGrid.
Public Sub LimpiarRegistros()
With Rejilla
'Selecciona todas las celdas del control MSFlexGrid menos las de la fila 0
.Row = 1: .Col = 0: .RowSel = .Rows - 1: .ColSel = .Cols - 1
'Los cambios afectan a todas las celdas seleccionadas
.FillStyle = flexFillRepeat
.Text = " "
.FillStyle = flexFillSingle 'Los cambios afectan sólo a la celda activa
.Row = 1: .Col = 0: 'Selecciona la celda 1,0
End With
End Sub
Hacer doble clic en el botón de comando Salir. En la ventana de código digitar el
siguiente código:
Private Sub Salir_Click()
Close 'Cierra el archivo de alumnos
Unload Me
End 'Finaliza la ejecución del programa
End Sub
Presionar la tecla F5 para ejecutar el programa. Hacer clic en el botón Consultar y los
datos del archivo de alumnos aparecerán en las celdas del control MSFlexGrid. Para eliminar
un registro, situar el puntero del mouse sobre el registro y hacer clic (el registro queda
resaltado bajo un fondo azul y el botón Eliminar se activa). Hacer clic en el botón Eliminar y
los registros serán eliminados del archivo de alumnos.

Ing. Hermas Herrera Callejas Página: 18 de 19


Computación para Ingeniería I y Laboratorio CAP 9 – Visual Basic – El control MSFlexGrid

Para modificar la información de un registro, mantener presionada la tecla Alt, situar el


puntero del mouse sobre uno de los campos del registro y hacer clic. El punto de inserción
aparecerá al inicio de la celda listo para realizar las modificaciones. Utilizar las teclas de
dirección flecha derecha o flecha izquierda para desplazar el punto de inserción.
Para ingresar nuevos datos al archivo de alumnos, situar el puntero del mouse sobre
el control MSFlexGrid y hacer clic con el botón derecho del mouse. El punto de inserción,
parpadeante, aparecerá después del último registro. Ingresar una cédula y presionar la tecla
Enter. Al presionar la tecla Enter, el punto de inserción aparecerá en la siguiente celda de la
derecha. Ingresar el apellido paterno del alumno y presionar Enter. Proceder así hasta llenar
todos los campos del registro. Finalmente, hacer clic en el botón Guardar.
Al presionar el botón derecho del mouse, el punto de inserción aparece después del
último registro listo para ingresar nuevos datos.

Ing. Hermas Herrera Callejas Página: 19 de 19

Potrebbero piacerti anche