Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Visual Basic Net
Visual Basic Net
Codificacin:
Public Class FRMCADENA
Private Sub BTNSPLIT_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BTNSPLIT.Click
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
183
Dim CAD As String
Dim VEC() As String
Dim I As Integer
CAD = TXTCAD.Text.Trim
ListBox1.Items.Clear()
VEC = CAD.Split(" ".ToCharArray)
For I = 0 To UBound(VEC)
ListBox1.Items.Add(VEC(I))
Next
End Sub
Private Sub FRMCADENA_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub FRMCADENA_Activated(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Activated
TXTCAD.Text = "esto es una prueba"
End Sub
Private Sub HandleCheckedChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles rbn1.CheckedChanged,
rbn2.CheckedChanged, rbn3.CheckedChanged, rbn4.CheckedChanged,
rbn5.CheckedChanged, rbn6.CheckedChanged, rbn7.CheckedChanged
DisplayText(CType(sender, RadioButton))
End Sub
Private Sub DisplayText(ByVal rbtn As RadioButton)
Dim cadr, texto As String
texto = TXTCAD.Text.Trim
If rbtn Is rbn1 Then
cadr = texto.Insert(3, " ojo")
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
184
ElseIf rbtn Is rbn2 Then
cadr = texto.Replace("prueba", "practica")
ElseIf rbtn Is rbn3 Then
'extraer apartir de la izquierda
cadr = texto.Substring(0, 3)
ElseIf rbtn Is rbn4 Then
'borrar los carect. desde la posicion 3 cinco caracteres
cadr = texto.Remove(3, 5)
ElseIf rbtn Is rbn5 Then
'extraer apartir de la derecha
cadr = texto.Substring(texto.Length - 3, 3)
ElseIf rbtn Is rbn6 Then
' extraer apartir de una posicion
cadr = texto.Substring(4, 5)
ElseIf rbtn Is rbn7 Then
' extraer apartir de una posicion
cadr = "posicion " & texto.IndexOf("t").ToString
End If
lblres.Text = cadr
End Sub
End Class
Ejemplo 2.-Empleando el Split
Mostrando el formulario principal
Controles: Txtoutput(textbox)
TxtInput
TxtSeparator
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
185
Codificacin;
Formulario frm3 (codificacion)
Public Class Form3
#Region " Windows Form Designer generated code "
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim x As New Form1()
x.ShowDialog()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim x As New Form2()
x.ShowDialog()
End Sub
End Class
b) el formulario 1.- Pasando una cadena a un vector
Public Class Form1
Private Sub btnSplit_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles btnSplit.Click
Dim TempArray() As String
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
186
Dim CurIndex As Integer
lstOutput.Items.Clear()
If txtInput.Text.Length > 0 And _
txtSeparator.Text.Length > 0 Then
TempArray = txtInput.Text.Split(txtSeparator.Text)
For CurIndex = 0 To TempArray.GetUpperBound(0)
lstOutput.Items.Add(TempArray(CurIndex))
Next
End If
End Sub
End Class
-El formulario2 .-(join)
Public class form2
Private Sub btnJoin_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnJoin.Click
Dim TempArray() As String
Dim RandomInteger As New System.Random()
Dim CurIndex As Integer
Dim NumElements As Integer = Convert.ToInt32(txtArraySize.Text)
'Generate random numbers, put in TempArray
If NumElements > 0 Then
ReDim TempArray(NumElements)
For CurIndex = 0 To NumElements - 1
TempArray(CurIndex) = RandomInteger.Next(1000).ToString
Next
End If
'Join array elements into a comma-separated string
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
187
txtOutput.Text = String.Join(",", TempArray)
End Sub
End Class
Aplicacin 3.- Conversin de un numero al sistema binario y hexadecimal
Private Sub Cmdhexa_Click(.)
Dim cad As String , N, R as integer
Dim n%
n = Val(Text1.text) : cad = ""
Do While n <> 0 'Hacer mientras n sea diferente a cero
r = n Mod 16 :n = n \ 16
If r > 9 Then
cad = cad + Chr(55 + r)
Else
cad = cad + Str(r)
End If
Loop
Lbr2 = StrReverse(cad)
End Sub
Aplicacin 4.-Ingresando una frase por teclado
invertir las palabras en su misma posicin , luego visualizar la misma frase como una
pirmide cuyo vrtice es el centro de la frase.
Eventos Desarrollados
Private Sub CmdBin_Click(.)
Dim cad as String
Dim N, r as String
n =Val(TxtNum.text)
cad =""
Do While n <>0
r =n Mod 2
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
188
Private Sub CmdInvertir_Click( sender as object ,
e as Eventargs)
Dim PA, P, K, M as Integer
Dim Cad, palabra, scad as String
cad = Trim(Text1.text) 'la Frase ingresada
scad = "" ' Cadena Vacia Para Formar la frase invertida
PA = 1 ' es la posicin inicial de la palabra
For M = 1 To Len(cad)
'Se pregunta si el caracter es un espacio blanco o M es la ultima posicion
If Mid(cad, M, 1) = " " Then
If M = Len(cad) Then P =M Else P = M - 1
PALABRA = "" 'para formar la palabra invertida
For k = PA To P
PALABRA = Mid(cad, k, 1) + PALABRA
Next
scad = scad + " " + PALABRA
End If
PA = P + 1
Next
Text2.text = scad 'Muestra cada palabra de forma invertida
End Sub
Private Sub CmdPiramide_Click()
List1.Items.Clear
cad = Trim(Text1.text) ' Almacena el valor de la Frase
List1.Width = Len(cad) * 100 ' El ancho queda definido por la frase en centenas
P = Len(cad) \ 2 + 1 ' Obtiene la posicin media de la frase
PL = Len(cad): a = 1: con = 1
CR = 1 ' Separamos en dos mitades la parte derecha un contador CR
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
189
CI = 1 ' Un contador para la parte Izquierda
cad3 = Space(P) & Mid(cad, P, 1) ' Coloca en el Vertice la Primera letra con espacios
List1.AddItem cad3
For I = 1 To P
If P - CI < 1 Then Exit For ' si es un valor menor a uno sale del for
cad1 = Space(P - CI) & Mid(cad, P - CI, CI) 'Cadena de la Izquierda
cad2 = Mid(cad, P + 1, cr) 'Cadena de La derecha
cad4 = cad1 & Trim(cad3) & cad2 'Unimos las tres Cadenas
List1.AddItem cad4 'Lo Colocamos en la lista
CI = CI + 1
cr = cr + 1
Next
End Sub
Ejercicios
Modifique el ejemplo anterior para mostrar en una lista los siguiente:
1) C colocar las palabras de izquierda a derecha
Cr
Cri
Cris
Crist....
2) Colocar las palabras de derecha a Izquierda
3) Colocar cada palabra en una linea ,por ejemplo
Cristo Es Nuestra Vida
4) Contabilizar la cantidad de palabras
5) que palabra tiene menor longitud
6) Mostrar la palabra que tenga mayor longitud
7.-
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
190
-
8.-Generacin de los carnet de esalud
De la misma forma es para 10 y 11 posicin con el materno, claro si la longitud
del apellido es menor de cuatro caracteres se coger el tercero, la 12 posicin
es el Primer carcter del nombre y los tres ltimos un correlativo para este caso
asumirlo como un contador de registro.
3.-Verificacin de Cdigos
El numero de Ruc se genera a partir
del numero de libreta electoral , en el
text1 solo se ingresara nmeros, luego
este numero se descompone de la
sgte manera:
Sm=D1*1 +D2*2 +D3*3 +.....+D8*8
Donde D1, D2 ...son los dgitos
Luego esta suma se divide entre 13, su
residuo se le concatena con el
numero electoral al final.
Los dos primeros dgitos puden ser:
10 =Persona natural
12=Persona J urdica
E l numero de Carnet es de 15
caracteres y se forma de la
siguiente manera:
Ejm:
Nombre Claudia
Ap. Paterno: Moreno
Ap. Materno: Lee
Fecha de Nac. 26/11/80
Sexo : F
Nro: generado
8011260MELEC001
Sexo 0=Femen 1=Masc
8 y 9 Corresponde al Primer y
cuarto carac. Del Paterno
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
191
Para verificar un cdigo se procede de la siguiente manera:
Suma= D1*6 + D2*5+D3*4+ D4*3 + D5* 2 + D6*1
Esta suma se divide entre 7 y su residuo se le asigna una letra
correspondiente de acuerdo a:
Residuo
residuo 0 1 2 3 4 5 6
Letra A B C D E F G
Si la letra es igual que el ultimo carcter del cdigo entonces mostrar cdigo
correcto de lo contrario cdigo incorrecto, pintarlo con azul y rojo
respectivamente.
Funciones con fechas.
Las fechas son cadenas especiales. Visual Basic sabe obtener y tratar la
informacin relativa a la fecha y la hora. Dispone para ello de una declaracin
de variable: Date. Una variable declarada como date puede contener una
fecha, una fecha y una hora o una hora solamente.
Dim MyDate As Date
Dim MyMonth As Integer
MyDate = #2/12/1969# ' Assign a date.
MyMonth = Month(MyDate) ' MyMonth contains 2.
Now._Devuelve la fecha y hora actual.
WeekDay._ Devuelve el da de la semana (En nmero, 1=Domingo,
2=Lunes,...)
Dim MyDate As Date
Dim MyWeekDay As Integer
MyDate = #2/12/1969# ' asigna una fecha
MyWeekDay = Weekday(MyDate) ' MyWeekDay contains 4
Day._ Obtiene el da, a partir de una fecha
Dim MyDate As Date
El cdigo ingresado ser de
7 caracteres los seis
primeros son dgitos y el
ultimo una letra de
verificacin:
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
192
Dim MyDay As Integer
MyDate = #2/12/1969# .
MyDay = Microsoft.VisualBasic.Day(MyDate) ' MyDay contains 12.
Month._ Obtiene el mes a partir de una fecha.
MyMonth = Month(MyDate) ' MyMonth contains 2.
Year._ Obtiene el ao a partir de una fecha.
MyYear = Year(MyDate) ' MyYear contains 1969.
Hour._ Obtiene la hora a partir de una hora
Minute._ Obtiene el minuto a partir de una hora.
Second._ Obtiene el segundo a partir de una hora.
DateAdd._ Aade un intervalo de tiempo a una fecha
Interval
Requerido. Valor de enumeracin DateInterval o expresin String que
representa el intervalo de tiempo que se desea agregar.
Number
Requerido. Double. Expresin de punto flotante que representa el
nmero de intervalos que se desea agregar. Number puede ser un valor
positivo (para obtener fechas u horas futuras) o negativo (para obtener
fechas u horas pasadas). Puede contener una parte decimal cuando
Interval especifica horas, minutos o segundos. Para otros valores de
Interval, se omite cualquier parte decimal de Number.
DateValue
Requerido. Date. Expresin que representa la fecha y la hora a la que
debe agregarse el intervalo. El propio DateValue no se modifica en el
programa que realiza la llamada.
Valores
El argumento Interval puede tener uno de los siguientes valores:
Valor de enumeracin Cadena Unidad de intervalo de tiempo agregada
DateInterval.Day d Da; truncado al valor integral
DateInterval.DayOfYear y Da; truncado al valor integral
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
193
DateInterval.Hour h Hora; redondeada al milisegundo ms
cercano
DateInterval.Minute n Minuto; redondeado al milisegundo ms
cercano
DateInterval.Month m Mes; truncado al valor integral
DateInterval.Quarter q Trimestre; truncado al valor integral
DateInterval.Second s Segundo; redondeado al milisegundo ms
cercano
DateInterval.Weekday w Da; truncado al valor integral
DateInterval.WeekOfYear ww Semana; truncada al valor integral
DateInterval.Year yyyy Ao; truncado al valor integral
Dim NextTime As Date = Now ' Current date and time.
NextTime = NextTime.AddDays(3.4) ' Increment by 3 2/5 days.
En este ejemplo se toma una fecha y mediante la funcin DateAdd, se muestra
la fecha correspondiente un nmero especificado de meses en el futuro.
Dim Msg, Number, StartDate As String 'Declare variables.
Dim Months As Double
Dim SecondDate As Date
Dim IntervalType As DateInterval
IntervalType = DateInterval.Month ' Especifica intervalos en meses.
StartDate = InputBox("Ingrese fecha ")
SecondDate = CDate(StartDate)
Number = InputBox("Ingrsa el numero de meses a adicionar")
Months = Val(Number)
Msg = "New date: " & DateAdd(IntervalType, Months, SecondDate)
MsgBox (Msg)
DateDiff._ Obtiene el intervalo de tiempo entre dos fechas
DateDiff(intervalo, fecha1, fecha2[, primerdasemana[,
primerasemanaao]])
Intervalo Descripcin
yyyy Ao
Q Trimestre
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
194
M Mes
Y Da del ao
D Da
W Da de la
semana
Ww Semana
H Hora
N Minuto
S Segundo
Este ejemplo utiliza la funcin DateDiff para mostrar el nmero de das entre
una fecha dada y hoy.
Dim DatTim1 As Date = #1/4/2004# ' primera fecha.
Dim DatTim2 As Date = #1/9/2004# ' segunda fecha.
Dim dias As Long = DateDiff("d", DatTim1, DatTim2)
Dim meses As Long = DateDiff("m", DatTim1, DatTim2)
MsgBox(dias) devuelve 5
Msgbox(meses) devuelve 0
Ejemplo 2.-
Dim FirstDate, Msg As String ' Declare variables.
Dim SecondDate As Date
FirstDate = InputBox("Ingrese fecha")
SecondDate = CDate(FirstDate)
Msg = "Dias desde la fecha: " & DateDiff(DateInterval.Day, Now, SecondDate)
MsgBox (Msg)
DatePart._ Devuelve una parte de una fecha (semana, trimestre, etc.)
El argumento Interval puede tener uno de los siguientes valores:
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
195
Valor de enumeracin Cadena Parte del valor de fecha u hora
devuelta
DateInterval.Day D Da del mes (del 1 al 31)
DateInterval.DayOfYear Y Da del ao (del 1 al 366)
DateInterval.Hour H Hora
DateInterval.Minute N Minuto
DateInterval.Month M Mes
DateInterval.Quarter Q Trimestre
DateInterval.Second S Segundo
DateInterval.Weekday W Da de la semana (del 1 al 7)
DateInterval.WeekOfYear Ww Semana del ao (de la 1 a la 53)
DateInterval.Year yyyy Ao
Este ejemplo obtiene una fecha y, utilizando la funcin DatePart, muestra el
trimestre del ao que ocurre.
Dim FirstDate, Msg As String 'Declare variables.
Dim SecondDate As Date
FirstDate = InputBox("Enter a date:")
SecondDate = CDate(FirstDate)
Msg = "Quarter: " & DatePart(DateInterval.Quarter, SecondDate)
MsgBox (Msg)
Datetime._ Representa un instante de tiempo, normalmente expresado en
forma de fecha y hora del da. (es propio del framework)
Dim objdate as datetime
Objdate.Metodo.- Lista de metodos
Objdate.day dia del mes
Similares a las funciones anteriores ,DayOfweek (dia de la
semana),Month,Now,Hour,Minute,seconds, etc
Funcin FORMAT
Esta funcin permite presentar cadenas de numricas o fechas de una determinada
forma. Permite establecer el Formato de esa cadena.
FechadeHoy = Format (Now, "yyyy-mm-dd)
la variable FechadeHoy tendr el valor 1998-05-21, que se refiere al da 21 de mayo de
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
196
1998, segn el formato recomendado por la norma ISO-8601 para la presentacin
de fechas. Si hubisemos puesto la expresin FechadeHoy = Format (Now, "dd/mm/yy) ,
la variable FechadeHoy contendra el valor 21/05/98 referido al da citado.
firstdayofweek. Especifica el primer da de la semana. Puede tomar uno de
estos valores o constantes :
Constante Valor Descripcin
VbSunday 1 Domingo (valor por defecto)
vbMonday 2 Lunes
vbTuesday 3 Martes
vbWednesday 4 Mircoles
vbThursday 5 Jueves
vbFriday 6 Viernes
vbSaturday 7 Sbado
Observe que usamos la expresin Variable =Format (1234567,"Formato") para
todos los ejemplos de nmeros.
Para poner los nmeros separados por millares :
Variable = Format(1234567, "##,###,###") Variable = 1.234.567
Ejemplos de funciones fecha:
Ingresando una fecha mostrar la edad exacta de cualquier presenta.
Public Class Form1
Private Sub BTnCalculo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnCalculo.Click
Dim FE, FA, FN As Date
FA = Today : FE = CDate(TXTFE.Text)
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
197
Dim DIAS, MES, AA, DA, DN As Integer
AA = Year(FA) - Year(FE)
FN = CDate(FE.Day & "/" & FE.Month & "/" & FA.Year)
DA = FA.DayOfYear : DN = FN.DayOfYear
If DN > DA Then AA = AA 1
FE = FE.AddYears(AA) : MES = DateDiff("M", FE, FA)
FE = FE.AddMonths(MES)
If DN > DA Then
DIAS = DateDiff("D", FA, FE)
Else
DIAS = DateDiff("D", FE, FA)
End If
LBFE.Text = AA : LBDIA.Text = DIAS : LBMES.Text = MES
End Sub
End Class
Ejercicios empleando funciones Fechas.-
1.- Realizar un programa que permita generar los cdigos de los empleados
que sern
almacenados en una lista , el cdigo se genera en funcin del cargo y ao
de ingreso
segn: el cdigo esta compuesto de seis
Caracteres.
Apellidos = Laura Lee
Cargo = Docente : fecha = 20/02/2001
Su cdigo ser : D01001
Consideracin: el Campo apellido y nombre solo debe aceptar letras y espacios
en Blanco, La fecha debe ser correcta.
2.- Aplicando Fechas.- Ingrese como datos Monto de la cuota, fecha de
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
198
vencimiento y fecha de pago , calcular los das de mora , pago por mora y el
pago total Los pago por Mora es de acuerdo a:
Menor a una semana 1% por cada dia
Entre 2 y 3 semanas 1.5% por dia
Mayor a 3 semanas 2% por dia
3.- Ingrese por teclado cierta cantidad de Bolas de billar , con el cual se desea
formar una pirmide de base cuadrada, cada superficie esta formado por un
numero cuadrado perfecto, calcular el numero de superficies que se forman y
el numero de bolas que sobran.
Ejemplo para 20 Bolas sern 3 superficies y sobran 6
bolas.
4.- Alquiler de Maquinas
El pago hora es de acuerdo al usuario:
Estudiante S/. 1.50 Publico S/2.00 Docente
S/1.0
5.- Realice una aplicacin en donde se ingrese a cuadros de
texto el Da(entre 1 y 31), Mes(entre 1 y 12) y Ao de
Nacimiento(4 dgitos) de una persona, luego al pulsar un clic sobre el botn
"Calcular mostrar su Edad y el signo Zodiacal (control Image) al que
pertenece.
NOTA : Validar que en los cuadros de texto slo se debe ingresar
dgitos.
1. ENUNCIADO : disee un formulario que simule un cheque bancario
F Se ingresa el Valor del monto del cheque (slo dgitos entero
positivo de mximo cuatro dgitos).
F La cantidad del monto en letras se mostrar automticamente una
vez ingresado el valor del monto del cheque.
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
199
F Al pulsar Enter el enfoque pasar a ingresar el nombre del titular del
cheque
F La fecha de mostrar en formato largo.
F Mostrar la firma del administrador general del banco
Aplicacion nro 3.- Juego de dados
Codificacin
Public Class frmdado
Dim ruta As String = "d:\bakupweb\dibujos\dado"
Private Shared myTimer As New System.Windows.Forms.Timer()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Timer1.Enabled = True
txtvueltas.Text = ""
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1100
System.EventArgs) Handles Timer1.Tick
Static n As Integer : Dim d1, d2 As Integer
Randomize()
d1 = CInt(Rnd() * 5) + 1 : d2 = CInt(Rnd() * 5) + 1
txtvueltas.Text = (5 - n).ToString : n = n + 1
pic1.Image = Drawing.Image.FromFile(ruta & d1 & ".bmp")
pic2.Image = Drawing.Image.FromFile(ruta & d2 & ".bmp")
If n > 5 Then
Timer1.Enabled = False
If d1 + d2 = 12 Or d1 + d2 = 7 Then
MsgBox("gano")
Else
MsgBox("intente de nuevo")
End If
n = 0
End If
End Sub
End Class
Aplicacin empleando funciones y modulos
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1101
Module Module1
'Variables Publicas para todos los formularios
Public ntotal, naprobados, ndesaprobados As Byte
Public suma, ptotal As Single
Public Function calcular_promedio(ByVal exp As Byte, ByVal exf As Byte) As
Single
Return (Convert.ToSingle(exp * 2 + exf) / 3)
End Function
Public Function calcularCondicion(ByVal prom As Single) As String
suma += prom
ntotal += 1
If (prom > 13) Then
naprobados += 1
Return ("aprobado")
Else
ndesaprobados += 1
Return ("desaprobado")
End If
End Function
End Module
Codificacin Para el formulario 1.-(frmproceso)
Public Class frmProceso
Private Sub Btnnuevo_Click(ByVal sender As System.Object, ByVal e As
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1102
System.EventArgs) Handles Btnnuevo.Click
Dim x As Control
For Each x In Controls
If TypeOf x Is TextBox Then x.Text = ""
Next
End Sub
Private Sub BtnCalcular_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnCalcular.Click
Dim ep, ef As Byte : Dim pro As Single
ep = Convert.ToByte(txteparcial.Text) : ef =
Convert.ToByte(txtefinal.Text)
pro = calcular_promedio(ep, ef) : txtpromedio.Text = Format(pro, "#0.0")
txtcondicion.Text = calcularCondicion(pro)
If pro > 10.5 Then
txtcondicion.ForeColor = System.Drawing.Color.Blue
Else
txtcondicion.ForeColor = System.Drawing.Color.Red
End If
End Sub
Private Sub txtnombre_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtnombre.KeyPress
'Para enfocar otro objeto
If Asc(e.KeyChar) = 13 Then
txteparcial.Focus()
End If
End Sub
Function SoloNumeros(ByVal Keyascii As Short) As Short
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1103
If InStr("1234567890", Chr(Keyascii)) = 0 Then
SoloNumeros = 0
Else
SoloNumeros = Keyascii
End If
Select Case Keyascii
Case 8 : SoloNumeros = Keyascii
Case 13 : SoloNumeros = Keyascii
End Select
End Function
Private Sub Btninforme_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Btninforme.Click
Dim miform As New frmInforme() ' Para llamar al formulario informe
miform.ShowDialog()
End Sub
Private Sub BtnSalir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnSalir.Click
Me.Close()
End Sub
Private Sub txteparcial_TextChanged(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles txteparcial.TextChanged
End Sub
Private Sub txteparcial_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txteparcial.KeyPress
Dim KeyAscii As Short = CShort(Asc(e.KeyChar))
Dim n As Byte
KeyAscii = CShort(SoloNumeros(KeyAscii))
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1104
If KeyAscii = 0 Then
e.Handled = True
ElseIf KeyAscii = 13 Then
n = Convert.ToByte(txteparcial.Text)
If n < 0 Or n > 20 Then
MsgBox("solo un valor de 0 a 20")
End If
End If
End Sub
End Class
Para el formulario Informe.-
Public Class frmInforme
Private Sub frmInforme_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
txttotAlum.Text = ntotal.ToString : txtNaprob.Text = naprobados.ToString
txtNdes.Text = ndesaprobados.ToString
txtPtotal.Text = Format(suma / ntotal, "#.00")
End Sub
End Class
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1105
Semana 5 : Controles contenedores de
menus
Control GroupBox
Nos permite, como indica su nombre, agrupar controles en su interior, tanto
RadioButton como de otro tipo, ya que se trata de un control contenedor.
Una vez dibujado un GroupBox sobre un formulario, podemos arrastrar y soltar
sobre l, controles ya existentes en el formulario, o crear nuevos controles
dentro de dicho control. De esta forma, podremos ya, en este ejemplo,
seleccionar ms de un RadioButton del formulario.
Ejemplo 13
El evento CheckedChanged, al igual que ocurra con los controles
CheckBox, ser el que tendremos que escribir para ejecutar el cdigo en
respuesta a la pulsacin sobre un control RadioButton. El el cdigo que
se muestra los eventos correspondientes a los controles de radio de este
ejemplo. Para cambiar el tipo de fuente, instanciamos un objeto Font y
lo asignamos a la propiedad Font del TextBox; mientras que para cambiar
el color, utilizamos la estructura Color y la propiedad BackColor, tambin del
TextBox.
Private Sub rbtTahoma_CheckedChanged(ByVal sender As System.Object,
ByVal e As
System.EventArgs) Handles rbtTahoma.CheckedChanged
Me.txtNombre.Font = New Font("Tahoma", 12)
End Sub
Private Sub rbtGaramond_CheckedChanged(ByVal sender As System.Object,
ByVal e As
System.EventArgs) Handles rbtGaramond.CheckedChanged
Me.txtNombre.Font = New Font("Garamond", 8)
End Sub
Private Sub rbtComic_CheckedChanged(.) Handles
rbtComic.CheckedChanged
Me.txtNombre.Font = New Font("Comic Sans MS", 15)
End Sub
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1106
Private Sub rbtVerde_CheckedChanged(ByVal sender As System.Object,
ByVal e As
System.EventArgs) Handles rbtVerde.CheckedChanged
Me.txtNombre.BackColor = Color.Green
End Sub
Private Sub rbtAzul_CheckedChanged(.Handles rbtAzul.CheckedChanged
Me.txtNombre.BackColor = Color.Blue
End Sub
Private Sub rbtAmarillo_CheckedChanged(.Handles
rbtAmarillo.CheckedChanged
Me.txtNombre.BackColor = Color.Yellow
End Sub
Para mostrar algunas de las
funcionalidades de este
control, utilizaremos el
proyecto de ejemplo ListBoxPru
que empl ea l i st as,
groupbox.
El ejemplo, como puede
comprobar el lector, consiste
en un formulario que contiene
un ListBox principal, con el
nombre lstValores, que
dispone de una serie de
valores asignados en tiempo
de diseo.
Cada vez que hacemos clic en alguno de los valores, se produce el evento
SelectedIndexChanged, que utilizamos para mostrar en este caso, el nombre
del elemento en el ttulo del formulario, la clase frmListas, correspondiente al
formulario
' declaramos esta constante a nivel de clase, para poner como ttulo
' del formulario junto al elemento seleccionado de la lista
Public Const TITULO As String = "Elemento seleccionado: "
' este evento se produce cada vez que se cambia el
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1107
' ndice seleccionado del ListBox
Private Sub lstValores_SelectedIndexChanged( .) Handles
lstValores.SelectedIndexChanged
' mostrar en el ttulo del formulario el valor
' actualmente seleccionado de la lista
Me.Text = TITULO & Me.lstValores.SelectedItem
End Sub
Private Sub rbtUno_CheckedChanged(..) Handles rbtUno.CheckedChanged
' establecer tipo de seleccin en el ListBox a un elemento
Me.lstValores.SelectionMode = SelectionMode.One
End Sub
Private Sub rbtMultiple_CheckedChanged(..) Handles
rbtMultiple.CheckedChanged
' establecer tipo de seleccin en el ListBox a un mltiples
' elementos
Me.lstValores.SelectionMode = SelectionMode.MultiSimple
End Sub
Private Sub rbtExtendida_CheckedChanged(.) Handles
rbtExtendida.CheckedChanged
' establecer tipo de seleccin en el ListBox a mltiples
' elementos de modo extendido
Me.lstValores.SelectionMode = SelectionMode.MultiExtended
End Sub
Private Sub chkOrdenar_CheckedChanged(..) Handles
chkOrdenar.CheckedChanged
' segn el valor del CheckBox, ordenamos o quitamos
' la opcin de ordenar del ListBox
Me.lstValores.Sorted = Me.chkOrdenar.Checked
End Sub
Private Sub chkColumnas_CheckedChanged(..) Handles
chkColumnas.CheckedChanged
Facultad de Ingenieria Industrial y de Sistemas
Ing. Alberto Moreno Cueva
Pgina
1108
' segn el valor del CheckBox, mostramos el ListBox
' en varias columnas o en una
Me.lstValores.MultiColumn = Me.chkColumnas.Checked
End Sub
Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnAgregar.Click
' aadimos el contenido del TextBox como
' un elemento a la lista
Me.lstValores.Items.Add(Me.txtValor.Text)
End Sub
Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnBuscar.Click
Dim iPosicion As Integer
' el mtodo FindString() de la lista busca un valor
iPosicion = Me.lstValores.FindString(Me.txtValor.Text)
' el campo NoMatches indica si no existe el valor buscado
If iPosicion = Me.lstValores.NoMatches Then
MessageBox.Show("No existe el valor")
Ing. Alberto Moreno Cueva
Pgina
1109
Else
' si encontramos el valor en la lista, lo seleccionamos por cdigo
Me.lstValores.SelectedIndex = iPosicion
End If
End Sub
Private Sub btnSelecCod_Click(..) Handles btnSelecCod.Click
' para seleccionar elementos de un ListBox por cdigo
' podemos utilizar el mtodo SetSelected()
Me.rbtMultiple.Checked = True
Me.lstValores.SetSelected(1, True)
Me.lstValores.SetSelected(3, True)
Me.lstValores.SetSelected(5, True)
End Sub
Private Sub btnTrapasarSelec_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnTrapasarSelec.Click
Dim oSeleccion As ListBox.SelectedObjectCollection
' obtenemos con SelectedItems los elementos seleccionados
' de un ListBox
oSeleccion = Me.lstValores.SelectedItems
' si existen elementos seleccionados,
' los traspasamos a otro ListBox del formulario
If oSeleccion.Count > 0 Then
Dim oEnumerador As IEnumerator
oEnumerador = oSeleccion.GetEnumerator()
While oEnumerador.MoveNext()
Me.lstTraspaso.Items.Add(oEnumerador.Current)
End While
End If
End Sub
Private Sub
btnLimpiar_Clic
Ing. Alberto Moreno Cueva
Pgina
1110
k(..) Handles btnLimpiar.Click
' con el mtodo Clear() de la coleccin de elementos
' de un ListBox, borramos los elementos del controls
Me.lstTraspaso.Items.Clear()
End Sub
Control Panel
Utilizado para agrupar colecciones de controles.
Espacio de nombres: System.Windows.Forms
Creacion de controles mediante codigo.
Ejemplo 14
Comentarios
Panel es un control que contiene otros controles. Se puede utilizar Panel para agrupar
colecciones de controles, como un grupo de controles RadioButton. Al igual que sucede con otros
controles contenedores, como el control GroupBox, si la propiedad Enabled del control Panel est
establecida en false, los controles contenidos dentro de Panel tambin se deshabilitarn.
El control Panel se muestra de forma predeterminada sin bordes. Para proporcionar un borde
estndar o tridimensional, se utiliza la propiedad BorderStyle para distinguir el rea del panel de
otras reas del formulario. Debido a que el control Panel deriva de la clase ScrollableControl, se
puede utilizar la propiedad AutoScroll para habilitar barras de desplazamiento en el control Panel.
Cuando la propiedad AutoScroll est establecida en true, es posible desplazarse a cualquier
control situado dentro de Panel, aunque fuera de su regin visible, con las barras de
desplazamiento proporcionadas.
El control Panel no muestra ningn ttulo. Si necesita un control similar a Panel que puede mostrar
un ttulo, vea el control GroupBox. En el ejemplo de cdigo siguiente se crea un control Panel, y
se agrega Label y TextBox a Panel. El control Panel se muestra con un borde tridimensional para
distinguir dnde est situado el control Panel en relacin con otros objetos del formulario. En este
ejemplo se requiere que se llame al mtodo definido en este ejemplo desde dentro de un
formulario existente y que se haya agregado el espacio de nombres System.Drawing al cdigo
Ing. Alberto Moreno Cueva
Pgina
1111
fuente para el formulario.
Visual Basic
Public Sub CreateMyPanel()
Dim panel1 As New Panel() : Dim textBox1 As New TextBox()
Dim label1 As New Label() : ' Iniciar el Panel de control.
panel1.Location = New Point(56, 72) : panel1.Size = New Size(264, 152)
' Establecer la propiedad BorderStyle para el Grupo en tres dimensiones.
panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
' Inicializar la etiqueta y controles TextBox.
label1.Location = New Point(16, 16)
label1.Text = "label1" : label1.Size = New Size(104, 16)
textBox1.Location = New Point(16, 32)
textBox1.Text = "" : textBox1.Size = New Size(152, 20)
' Aadir el Grupo de control a la forma.
Me.Controls.Add(panel1)
' Aadir la etiqueta y controles TextBox al Grupo.
panel1.Controls.Add(label1) : panel1.Controls.Add(textBox1)
End Sub
Control TabControl (Clase)
Administra un conjunto relacionado de pginas de fichas.
Espacio de nombres: System.Windows.Forms
Ensamblado: System.Windows.Forms (en system.windows.forms.dll)
TabControl contiene pginas de fichas, representadas por objetos TabPage, que se agregan
mediante la propiedad TabPages. El orden de las pginas de fichas de esta coleccin refleja el
orden en que las fichas aparecen en el control.
El usuario puede cambiar el objeto TabPage actual haciendo clic en una de las fichas del control.
Tambin se puede cambiar mediante programacin el objeto TabPage actual utilizando una de las
Ing. Alberto Moreno Cueva
Pgina
1112
propiedades de TabControl siguientes:
SelectedIndex
SelectedTab
En Microsoft .NET Framework versin 2.0, tambin puede utilizar uno de los mtodos siguientes:
SelectTab
DeselectTab
En .NET Framework 2.0, puede responder cuando la ficha actual cambie controlando uno de los
eventos siguientes:
Deselecting
Deselected
Selecting
Selected
Las fichas incluidas en TabControl forman parte de TabControl, pero no forman parte de los
controles TabPage individuales. Los miembros de la clase TabPage, como la propiedad
ForeColor, slo afectan al rectngulo cliente de la pgina de fichas, pero no a las fichas. Adems,
el mtodo Hide de TabPage no ocultar la ficha. Para ocultar la ficha, debe quitar el control
TabPage de la coleccin de TabControl.TabPages.
En .NET Framework 2.0, la ficha se considera parte de la pgina de fichas para determinar cundo
se producen los eventos Enter y Leave de TabPage. En las versiones anteriores de .NET
Framework, los eventos Enter y Leave de TabPage no se producen cuando una ficha tiene el
foco o lo pierde, nicamente se producen cuando el rectngulo cliente de la pgina de fichas tiene
el foco o lo pierde.
Los siguientes eventos no se producen para la clase TabControl salvo que haya al menos un
objeto TabPage en la coleccin de TabControl.TabPages: Control.Click, Control.DoubleClick,
Control.MouseDown, Control.MouseUp, Control.MouseHover, Control.MouseEnter,
Control.MouseLeave y Control.MouseMove. Si en la coleccin hay un objeto TabPage, como
mnimo, y el
Ing. Alberto Moreno Cueva
Pgina
1113
usuario interacta con el encabezado del control de ficha (donde aparecen los nombres de
TabPage), TabControl provoca el evento apropiado. Sin embargo, si la interaccin del usuario se
produce dentro de la propiedad ClientRectangle de la pgina de fichas, TabPage provoca el
evento adecuado.
Los controles incluidos en TabPage no se crean hasta que se muestra la pgina de fichas;
tampoco se activan los enlaces de datos de estos controles hasta que dicha pgina de fichas se
muestra.
Cuando los estilos visuales estn habilitados y la propiedad Alignment se establece en un valor
distinto de Top, es posible que el contenido de las fichas no se represente correctamente. Para
evitar este problema, puede dibujar el contenido de las fichas utilizando el dibujo del propietario.
Cuando la propiedad Alignment se establece en un valor distinto de Top y la propiedad
Appearance se establece en un valor distinto de Normal, puede que el contenido de la pgina de
fichas no se represente correctamente.
Ejemplo
En el ejemplo de cdigo siguiente se utiliza el Diseador de Windows Forms de Visual Studio
.NET para crear un control TabControl con tres pginas de fichas. Cada pgina de fichas contiene
varios controles.
Visual Basic
Ejemplo 15
Public Class Form1
' Variable del diseador requerida
Private components As System.ComponentModel.Container
' Declaracion variables tipo objetos.
Private tab3RadioButton2 As System.Windows.Forms.RadioButton
Private tab3RadioButton1 As System.Windows.Forms.RadioButton
Private tab2CheckBox3 As System.Windows.Forms.CheckBox
Private tab2CheckBox2 As System.Windows.Forms.CheckBox
Private tab2CheckBox1 As System.Windows.Forms.CheckBox
Ing. Alberto Moreno Cueva
Pgina
1114
Private tab1Label1 As System.Windows.Forms.Label
Private WithEvents tab1Button1 As System.Windows.Forms.Button
Private tabPage3 As System.Windows.Forms.TabPage
Private tabPage2 As System.Windows.Forms.TabPage
Private tabPage1 As System.Windows.Forms.TabPage
Private tabControl1 As System.Windows.Forms.TabControl
---------------------------------------------------------------------------------------------------------------
Public Sub New()
' Esta convocatoria es necesaria para el Diseador de Windows Forms apoyo.
InitializeComponent()
End Sub
' Este metodo es Requerido para el diseo.
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.tabPage1 = New System.Windows.Forms.TabPage()
Me.tab2CheckBox3 = New System.Windows.Forms.CheckBox()
Me.tab3RadioButton2 = New System.Windows.Forms.RadioButton()
Me.tabControl1 = New System.Windows.Forms.TabControl()
Me.tab2CheckBox2 = New System.Windows.Forms.CheckBox()
Me.tab2CheckBox1 = New System.Windows.Forms.CheckBox()
Me.tab3RadioButton1 = New System.Windows.Forms.RadioButton()
Me.tab1Label1 = New System.Windows.Forms.Label()
Me.tabPage3 = New System.Windows.Forms.TabPage()
Me.tabPage2 = New System.Windows.Forms.TabPage()
Me.tab1Button1 = New System.Windows.Forms.Button()
tabPage1.Text = "tabPage1"
tabPage1.Size = New System.Drawing.Size(256, 214)
tabPage1.TabIndex = 0
tab2CheckBox3.Location = New System.Drawing.Point(32, 136)
tab2CheckBox3.Text = "checkBox3"
tab2CheckBox3.Size = New System.Drawing.Size(176, 32)
tab2CheckBox3.TabIndex = 2 : tab2CheckBox3.Visible = True
tab3RadioButton2.Location = New System.Drawing.Point(40, 72)
tab3RadioButton2.Text = "radioButton2"
Ing. Alberto Moreno Cueva
Pgina
1115
tab3RadioButton2.Size = New System.Drawing.Size(152, 24)
tab3RadioButton2.TabIndex = 1 : tab3RadioButton2.Visible = True
tabControl1.Location = New System.Drawing.Point(16, 16)
tabControl1.Size = New System.Drawing.Size(264, 240)
tabControl1.SelectedIndex = 0 : tabControl1.TabIndex = 0
tab2CheckBox2.Location = New System.Drawing.Point(32, 80)
tab2CheckBox2.Text = "checkBox2"
tab2CheckBox2.Size = New System.Drawing.Size(176, 32)
tab2CheckBox2.TabIndex = 1 : tab2CheckBox2.Visible = True
tab2CheckBox1.Location = New System.Drawing.Point(32, 24)
tab2CheckBox1.Text = "checkBox1"
tab2CheckBox1.Size = New System.Drawing.Size(176, 32)
tab2CheckBox1.TabIndex = 0
tab3RadioButton1.Location = New System.Drawing.Point(40, 32)
tab3RadioButton1.Text = "radioButton1"
tab3RadioButton1.Size = New System.Drawing.Size(152, 24)
tab3RadioButton1.TabIndex = 0
tab1Label1.Location = New System.Drawing.Point(16, 24)
tab1Label1.Text = "label1"
tab1Label1.Size = New System.Drawing.Size(224, 96)
tab1Label1.TabIndex = 1 : tabPage3.Text = "tabPage3"
tabPage3.Size = New System.Drawing.Size(256, 214)
tabPage3.TabIndex = 2 : tabPage2.Text = "tabPage2"
tabPage2.Size = New System.Drawing.Size(256, 214)
tabPage2.TabIndex = 1
tab1Button1.Location = New System.Drawing.Point(88, 144)
tab1Button1.Size = New System.Drawing.Size(80, 40)
tab1Button1.TabIndex = 0 : tab1Button1.Text = "button1"
Me.Text = "Form1"
'Agrega los controles a la segunda pestaa
tabPage2.Controls.Add(Me.tab2CheckBox3) tabPage2.Controls.Add(Me.tab2CheckBox2)
tabPage2.Controls.Add(Me.tab2CheckBox1)
' Adds controls to the third tab page.
tabPage3.Controls.Add(Me.tab3RadioButton2)
Ing. Alberto Moreno Cueva
Pgina
1116
tabPage3.Controls.Add(Me.tab3RadioButton1)
'agrega los controles a la pestaa.
tabPage1.Controls.Add(Me.tab1Label1)
tabPage1.Controls.Add(Me.tab1Button1)
'agregra el tabcontrol al formulario.
Me.Controls.Add(tabControl1)
' Aade la pgina a la ficha TabControl
tabControl1.Controls.Add(Me.tabPage1)
tabControl1.Controls.Add(Me.tabPage2) : tabControl1.Controls.Add(Me.tabPage3)
End Sub
------------------------------------------------------------------------------------------------------------------
Private Sub tab1Button1_Click(sender As Object, e As System.EventArgs) _
Handles tab1Button1.Click
' Inserta el cdigo que debe ejecutar cuando se hace clic en el botn
End Sub
-------------------------------------------------------------------------------------------------------------------
Public Shared Sub Main()
Application.Run(New Form1())
End Sub
End Class
Control MenuStrip (Clase)
Proporciona una estructura de men para un formulario.
MenuStrip es el contenedor de nivel superior que reemplaza a MainMenu. Tambin proporciona
las caractersticas de control de claves y de interfaz de mltiples documentos (MDI).
Funcionalmente, ToolStripDropDownItem y ToolStripMenuItem operan junto con MenuStrip,
aunque se derivan de ToolStripItem.
Los elementos siguientes estn diseados especficamente para trabajar sin problemas con
ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Estn
disponibles de forma predeterminada en tiempo de diseo para el control MenuStrip:
Ing. Alberto Moreno Cueva
Pgina
1117
ToolStripMenuItem
ToolStripTextBox
ToolStripComboBox
El control MenuStrip representa el contenedor para la estructura de men de un formulario.
Puede agregar objetos ToolStripMenuItem al objeto MenuStrip, que representan los comandos
de men individuales de la estructura de men. Cada objeto ToolStripMenuItem puede ser un
comando de la aplicacin o un men primario para otros elementos de submen.
Aunque el control MenuStrip reemplaza y agrega funcionalidad al control MainMenu de versiones
anteriores, se conserva MainMenu a efectos de compatibilidad con versiones anteriores y uso
futuro, en su caso.
Ejemplo 16
En el ejemplo de cdigo siguiente se muestra un MenuStrip en un escenario de interfaz de
mltiples documentos (MDI).
Visual Basic
' Este ejemplo de cdigo muestra cmo utilizar ToolStripPanel
' los controles con un interfaz de documento mltiple (MDI).
Public Class Form1
Inherits Form
Public Sub New()
Me.IsMdiContainer = True
' Crear controles ToolStripPanel.
Dim tspTop As New ToolStripPanel() : Dim tspBottom As New ToolStripPanel()
Dim tspLeft As New ToolStripPanel() : Dim tspRight As New ToolStripPanel()
' ToolStripPanel los controles portuarios a los bordes de la forma.
tspTop.Dock = DockStyle.Top : tspBottom.Dock = DockStyle.Bottom
tspLeft.Dock = DockStyle.Left : tspRight.Dock = DockStyle.Right
' ToolStrip crear controles para desplazarse por los
Ing. Alberto Moreno Cueva
Pgina
1118
' ToolStripPanel controles.
' Crear el "Top" ToolStrip control y aadir
Dim tsTop As New ToolStrip()
tsTop.Items.Add("Top")
tspTop.Join(tsTop)
' Crear el "fondo" y aadir el control ToolStrip
' correspondiente a la ToolStripPanel.
Dim tsBottom As New ToolStrip()
tsBottom.Items.Add("Bottom")
tspBottom.Join(tsBottom)
' Create the "Right" ToolStrip control and add
' to the corresponding ToolStripPanel.
Dim tsRight As New ToolStrip()
tsRight.Items.Add("Right")
tspRight.Join(tsRight)
' Create the "Left" ToolStrip control and add
' to the corresponding ToolStripPanel.
Dim tsLeft As New ToolStrip()
tsLeft.Items.Add("Left")
tspLeft.Join(tsLeft)
' Create a MenuStrip control with a new window.
Dim ms As New MenuStrip()
Dim windowMenu As New ToolStripMenuItem("Window")
Dim windowNewMenu As New ToolStripMenuItem("New", Nothing, New
EventHandler(AddressOf windowNewMenu_Click))
windowMenu.DropDownItems.Add(windowNewMenu)
CType(windowMenu.DropDown, ToolStripDropDownMenu).ShowImageMargin = False
CType(windowMenu.DropDown, ToolStripDropDownMenu).ShowCheckMargin = True
' Assign the ToolStripMenuItem that displays
' the list of child forms.
ms.MdiWindowListItem = windowMenu
' Add the window ToolStripMenuItem to the MenuStrip.
Ing. Alberto Moreno Cueva
Pgina
1119
ms.Items.Add(windowMenu)
' Dock the MenuStrip to the top of the form.
ms.Dock = DockStyle.Top
' The Form.MainMenuStrip property determines the merge target.
Me.MainMenuStrip = ms
' Add the ToolStripPanels to the form in reverse order.
Me.Controls.Add(tspRight)
Me.Controls.Add(tspLeft)
Me.Controls.Add(tspBottom)
Me.Controls.Add(tspTop)
' Add the MenuStrip last.
' This is important for correct placement in the z-order.
Me.Controls.Add(ms)
End Sub
' This event handler is invoked when
' the "New" ToolStripMenuItem is clicked.
' It creates a new Form and sets its MdiParent
' property to the main form.
Private Sub windowNewMenu_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim f As New Form()
f.MdiParent = Me
f.Text = "Form - " + Me.MdiChildren.Length.ToString()
f.Show()
End Sub
End Class
Aplicacion.- Empleo de Menus , Cuadro de dialogo , statubar , imagelist
Ing. Alberto Moreno Cueva
Pgina
1120
Controles empleados en el formulario
Codificacin:
Modulo1
Module Module2
Public n As Byte
End Module
Para el primer formulario editor (frmEditor)
Public Class frmeditor
Private Sub MnuArchivo_nuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventAr
ColoDialog
OpenFileDailog
FontDialog
Ing. Alberto Moreno Cueva
Pgina
1121
gs) Handles MnuArchivo_nuevo.Click
Dim x As New frmdocumento()
x.MdiParent = Me
x.Show()
n += 1
x.Text = " documento " & n.ToString
End Sub
Private Sub frmeditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
StatusBarPanel3.Text = " 0 documento"
StatusBarPanel3.ToolTipText = "Documentos Abiertos"
StatusBarPanel4.Text = Date.Now.ToLongTimeString
StatusBarPanel4.ToolTipText = Date.Now.Today.ToLongDateString
End Sub
Private Sub MnuArchivo_abrir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuArchivo_abrir.Click
Dim y As New frmdocumento()
Dim nom As String
With OdgEditor
.Title = "Archivo de texto enrriquecido"
.Filter = "Abrir archivo (*.rtf)|*.rtf"
If (.ShowDialog = DialogResult.OK) And .FileName <> "" Then
y.MdiParent = Me
y.Show() : nom = .FileName
Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl
x.Text = nom
End If
Ing. Alberto Moreno Cueva
Pgina
1122
End With
End Sub
Private Sub MnuFormato_fondo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuFormato_fondo.Click
With CdgEditor
If (.ShowDialog = DialogResult.OK) Then
Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl
x.BackColor = .Color
End If
End With
End Sub
Private Sub MnuFormato_fuente_Click(.) Handles MnuFormato_fuente.Click
With FdgEditor
If (.ShowDialog = DialogResult.OK) Then
Dim x As RichTextBox = Me.ActiveMdiChild.ActiveControl
x.ForeColor = .Color
x.Font = .Font
End If
End With
End Sub
Private Sub mnuventana_horizontal_Click(.) Handles mnuventana_horizontal.Click
Me.LayoutMdi(MdiLayout.TileHorizontal)
End Sub
Private Sub mnuVentana_cascada_Click(.) Handles mnuVentana_cascada.Click
Me.LayoutMdi(MdiLayout.Cascade)
End Sub
Ing. Alberto Moreno Cueva
Pgina
1123
Private Sub MnuVentana_vertical_Click(.) Handles MnuVentana_vertical.Click
Me.LayoutMdi(MdiLayout.TileVertical)
End Sub
Private Sub tbrmenu_ButtonClick(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.ToolBarButtonClickEventArgs) Handles tbrmenu.ButtonClick
Select Case e.Button.ImageIndex
Case 0 : MnuArchivo_nuevo.PerformClick()
Case 1 : MnuArchivo_abrir.PerformClick()
Case 2 : 'MnuArchivo_nuevo.PerformClick()
End Select
End Sub
End Class
Control StatusStrip (Clase)
Representa un control en la barra de estado de Windows.
StatusStrip reemplaza el control StatusBar. Las caractersticas especiales de StatusStrip
incluyen un diseo de tabla personalizada, compatibilidad con los controles de tamao y
movimiento del formulario y con la propiedad Spring, que permite que ToolStripStatusLabel rellene
automticamente espacio disponible.
Los elementos siguientes estn diseados especficamente para trabajar sin problemas con
ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Estn
disponibles de forma predeterminada en tiempo de diseo para el control StatusStrip:
ToolStripStatusLabel
ToolStripDropDownButton
ToolStripSplitButton
ToolStripProgressBar
Un control StatusStrip muestra informacin acerca del objeto que se est mostrando en un Form,
los
Ing. Alberto Moreno Cueva
Pgina
1124
componentes del objeto o informacin contextual relativa a la operacin de ese objeto en la
aplicacin. Normalmente, un control StatusStrip est formado por objetos ToolStripStatusLabel,
cada uno de los cuales muestra texto, un icono o ambas cosas. StatusStrip tambin puede
contener controles ToolStripDropDownButton, ToolStripSplitButton y ToolStripProgressBar.
El control StatusStrip predeterminado no tiene paneles. Para agregar paneles a un StatusStrip,
utilice el mtodo ToolStripItemCollection.AddRange en tiempo de diseo, o utilice Editor de la
coleccin de elementos de StatusStrip en tiempo de diseo para agregar, quitar o reorganizar
elementos y modificar propiedades. Utilice el Tareas de StatusStrip (Cuadro de dilogo) en tiempo
de diseo para ejecutar los comandos comunes.
Aunque StatusStrip reemplaza y ampla el control StatusBar de versiones anteriores, se
conserva StatusBar a efectos de compatibilidad con versiones anteriores y uso futuro, en su caso.
Ejemplo 17
Imports System
Imports System.Text
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private statusStrip1 As StatusStrip
Private toolStripStatusLabel1 As ToolStripStatusLabel
Public Sub New()
InitializeComponent()
End Sub
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
Ing. Alberto Moreno Cueva
Pgina
1125
Private Sub InitializeComponent()
statusStrip1 = New System.Windows.Forms.StatusStrip()
toolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel()
statusStrip1.SuspendLayout()
SuspendLayout()
'
' The following code example demonstrates the syntax for setting
' various StatusStrip properties.
statusStrip1.Dock = System.Windows.Forms.DockStyle.Top
statusStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Visible
statusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem()
{toolStripStatusLabel1})
statusStrip1.LayoutStyle =
System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow
statusStrip1.Location = New System.Drawing.Point(0, 0)
statusStrip1.Name = "statusStrip1"
statusStrip1.ShowItemToolTips = True
statusStrip1.Size = New System.Drawing.Size(292, 22)
statusStrip1.SizingGrip = False
statusStrip1.Stretch = False
statusStrip1.TabIndex = 0
statusStrip1.Text = "statusStrip1"
'
' toolStripStatusLabel1
toolStripStatusLabel1.Name = "toolStripStatusLabel1"
toolStripStatusLabel1.Size = New System.Drawing.Size(109, 17)
toolStripStatusLabel1.Text = "toolStripStatusLabel1"
'
' Form1
'
ClientSize = New System.Drawing.Size(292, 273)
Controls.Add(statusStrip1)
Name = "Form1"
statusStrip1.ResumeLayout(False)
Ing. Alberto Moreno Cueva
Pgina
1126
statusStrip1.PerformLayout()
ResumeLayout(False)
PerformLayout()
End Sub
End Class
Los Arrays
Las variables que hemos estado usando hasta ahora, eran de tipo escalar: slo pueden
contener un valor a la vez.
Una de las formas en las que podemos agrupar varios datos es mediante los arrays (o
matrices).
Usando un array, podemos acceder a cualquiera de los valores que tenemos almacenado
mediante un ndice numrico. Por ejemplo, si tenemos la variable discografa y
queremos acceder al tercer disco, podramos hacerlo de la siguiente forma:
discografa(3).
Sabiendo esto, podemos comprobar que sera fcil recorrer el contenido de los arrays
mediante un bucle For.
Qu tipos de datos se pueden usar para crear arrays?
Los tipos de datos de las variables usadas como array, pueden ser de cualquier tipo,
dependiendo de lo que queramos guardar. Por ejemplo, si queremos guardar los
nombres de los discos que tenemos, podemos usar un array del tipo String, que lo que
nos interesa es saber el porcentaje de goles por partido de nuestro equipo de ftbol
favorito, el tipo de datos del array poda ser Decimal. Incluso si queremos, tambin
podemos crear un array de un tipo que nosotros hayamos definido o de cualquier clase
que exista en el .NET Framework.
Vale, muy bien, pero cmo narices le digo al Visual Basic que una variable es un array?
Declarar variables como arrays
Para poder
indicarle al VB
Ing. Alberto Moreno Cueva
Pgina
1127
que nuestra intencin es crear un array podemos hacerlo de
dos formas distintas, para este ejemplo crearemos un array de tipo Integer:
1- La clsica (la usada en versiones anteriores)
Dim a() As Integer
2- La nueva forma introducida en .NET:
Dim a As Integer()
De cualquiera de estas dos formas estaramos creando un array de tipo Integer llamada
Cuando declaramos una variable de esta forma, slo le estamos indicando al VB que
nuestra intencin es que la variable a sea un array de tipo Integer, pero ese array no
tiene reservado ningn espacio de memoria.
Reservar memoria para un array
Para poder hacerlo tenemos que usar la instruccin ReDim:
ReDim a(5)
Al ejecutarse este cdigo, tendremos un array con capacidad para 6 elementos.
Y son seis y no cinco, (como por lgica habra que esperar), porque en .NET Framework
el ndice menor de un array siempre es cero y en Visual Basic, el ndice superior es el
indicado entre parntesis. Por tanto el array a tendr reservada memoria para 6 valores
de tipo Integer, los ndices seran desde 0 hasta 5 ambos inclusive.
Adems de usar ReDim, que realmente sirve para "redimensionar" el contenido de un
array, es decir, para volver a dimensionarlo o cambiarlo por un nuevo valor. Si sabemos
con antelacin el tamao que contendr el array, podemos hacerlo de esta forma:
Dim a(5) As Integer
Con este cdigo estaramos declarando la variable a como un array de 6 elementos (de 0
a 5) del tipo Integer.
Cuando indicamos la cantidad de elementos que contendr el array no podemos usar la
segunda forma
de declaracin
Ing. Alberto Moreno Cueva
Pgina
1128
que te mostr anteriormente: Dim a As Integer(5) ya que
esto producira un error sintctico.
Nota: Aunque este curso es de Visual Basic .NET te dir que en C#, cuando
declaramos un array con el equivalente a Dim a(5) As Integer, que sera algo
como:
int[] a = new int[5], lo que estamos creando es un array de tipo int (el Integer de
C#) con 5 elementos, de 0 a 4.
Asignar valores a un array
Para asignar un valor a un elemento de un array, se hace de la misma forma que con las
variables normales, pero indicando el ndice (o posicin) en el que guardar el valor.
Por ejemplo, para almacenar el valor 15 en la posicin 3 del array a, haramos lo
siguiente:
a(3) = 15 o tambien puede ser i = b * a(3)
Los lmites de los ndices de un array
Como ya he comentado antes, el ndice inferior de un array, siempre es cero, esto es
invariable, todos los arrays de .NET Framework empiezan a contar por cero.
Pero el ndice superior puede ser el que nosotros queramos, aunque sin pasarnos, que la
memoria disponible se puede agotar si pretendemos usar un valor exageradamente alto.
Realmente el ndice superior de un array es 2^64 -1 (el valor mximo de un tipo Long)
Longitud de Un array arreglo.length
Esto es til si queremos acceder mediante un bucle For, en el siguiente cdigo se
mostraran todos los elementos del array a:
For i = 0 To a.Length - 1
Console.WriteLine(a(i))
Next
Ing. Alberto Moreno Cueva
Pgina
1129
Inicializar un array al declararla
Para inicializar un array debemos declarar ese array sin indicar el nmero de elementos
que contendr, seguida de un signo igual y a continuacin los valores encerrados en
llaves. Veamos un ejemplo:
Dim a() As Integer = {1, 42, 15, 90, 2}
Tambin podemos hacerlo de esta otra forma:
Dim a As Integer() = {1, 42, 15, 90, 2}
Usando cualquiera de estas dos formas mostradas, el nmero de elementos ser 5, por
tanto los ndices irn desde 0 hasta 4.
Los arrays pueden ser de cualquier tipo
En todos estos ejemplos estamos usando valores de tipo Integer, pero podramos hacer
lo mismo si fuesen de tipo String o cualquier otro.
En el caso de que sean datos de tipo String, los valores a asignar debern estar entre
comillas dobles o ser variables de tipo String. Por ejemplo:
Dim s As String() = {"Hola", "Mundo, ", "te", "saludo"}
s(3) = "saludamos"
Dim i As Integer
For i = 0 To s.Length - 1
Console.WriteLine(s(i))
Next
Usar un bucle For Each para recorrer los elementos de un array
El tipo de bucle For Each es muy til para recorrer los elementos de un array, adems de
ser una de las pocas, por no decir la nica, formas de poder acceder a un elemento de un
array sin indicar el ndice.
Dim a() As Integer = {1, 42, 15, 90, 2}
Console.WriteLi
ne("Elementos
Ing. Alberto Moreno Cueva
Pgina
1130
del array a()= {0}", a.Length)
Dim i As Integer
For Each i In a
Console.WriteLine(i)
Next
Console.WriteLine("Pulsa Intro para finalizar")
Console.ReadLine()
Sort, el cual sirve para clasificar el contenido de un array.
Para clasificar el array a, podemos hacerlo de dos formas:
a.Sort(a)
La variable a es un array, por tanto es del tipo Array y como tal, tiene el mtodo Sort, el
cual se usa pasando como parmetro el array que queremos clasificar.
Pero esto puede parecer una redundancia, as que es preferible, por claridad, usar el
segundo mtodo:
Array.Sort(a)
En el que usamos el mtodo Sort de la clase Array. Este mtodo es lo que se llama un
mtodo "compartido" y por tanto se puede usar directamente.
Veamos ahora un ejemplo completo en el que se crea y asigna un array al declararla, se
muestra el contenido del array usando un bucle For Each, se clasifica y se vuelve a
mostrar usando un bucle For normal.
Sub Main()
Dim a() As Integer = {1, 42, 15, 90, 2}
Console.WriteLine("Elementos del array a(): {0}", a.Length)
Dim i As Integer
For Each i In a
Ing. Alberto Moreno Cueva
Pgina
1131
Console.WriteLine(i)
Next
Console.WriteLine()
Array.Sort(a)
For i = 0 To a.Length - 1
Console.WriteLine(a(i))
Next
Console.WriteLine("Pulsa Intro para finalizar")
Console.ReadLine()
End Sub
Copiar los elementos de un array en otro array
La nica forma de tener copias independientes de dos arrays que contengan los mismos
elementos es haciendo una copia de un array a otro.
Esto lo podemos hacer mediante el mtodo CopyTo, al cual habr que indicarle el array
de destino y el ndice de inicio a partir del cual se har la copia.,ejemplo:
Dim a() As Integer = {1, 42, 15, 90, 2}
Dim b(a.Length - 1) As Integer
a.CopyTo(b, 0)
a(3) = 55
99
Dim i As Integer
For i = 0 To a.Length - 1
Console.WriteLine("a(i) = {0}, b(i)= {1}", a(i), b(i))
Next
En este
ejemplo,
Ing. Alberto Moreno Cueva
Pgina
1132
inicializamos un array, declaramos otro con el mismo nmero de
elementos, utilizamos el mtodo CopyTo del array con los valores, en el parmetro le
decimos qu array ser el que recibir una copia de esos datos y la posicin (o ndice) a
partir de la que se copiarn los datos, (indicando cero se copiarn todos los elementos);
despus cambiamos el contenido de uno de los elementos del array original y al mostrar
el contenido de ambos arrays, comprobamos que cada uno es independiente del otro.
Cambiar el tamao de un array y mantener los elementos que tuviera.
Para poder conseguirlo, debemos usar ReDim seguida de la palabra clave Preserve, por
tanto si tenemos la siguiente declaracin:
Dim a() As Integer = {1, 2, 3, 4, 5}
Y queremos que en lugar de 5 elementos (de 0 a 4) tenga, por ejemplo 10 y no perder
los otros valores, usaremos la siguiente instruccin:
ReDim Preserve a(10)
A partir de ese momento, el array tendr 11 elementos (de 0 a 10), los 5 primeros con
los valores que antes tena y los nuevos elementos tendrn un valor cero, que es el valor
por defecto de los valores numricos.
Si slo usamos ReDim a(10), tambin tendremos once elementos en el array, pero
todos tendrn un valor cero, es decir, si no se usa Preserve, se pierden los valores
contenidos en el array.
Eliminar un array de la memoria. _ Si en algn momento del programa queremos eliminar el
contenido de un array, porejemplo para que no siga ocupando memoria, ya que es posible que no
siga ocupandomemoria, podemos usar Erase seguida del array que queremos "limpiar", por
ejemplo:
Erase a ._ Esto eliminar el contenido del array a.
Si despus de eliminar el contenido de un array queremos volver a usarlo, tendremos
que ReDimensionarlo con el mismo nmero de dimensiones que tena, ya que Erase slo
borra el
contenido, no la
Ing. Alberto Moreno Cueva
Pgina
1133
definicin del array.
Los formatos a usar con las cadenas de
Console.Write y WriteLine.
Nota: El formato especificado en la cadena usada en los mtodos Write y WriteLine ser
el mismo que se puede usar con el mtodo Format de la clase String, por tanto, lo aqu
explicado ser aplicable a cualquier cadena.
Los marcadores se indican con un nmero encerrado entre llaves, los nmeros indicarn
el nmero u orden del parmetro que siga a la cadena en el que est ese marcador.
Como es habitual, el primer parmetro estar representado por el cero y as
sucesivamente.
Por ejemplo, para mostrar los valores de dos parmetros usaremos algo como esto:
Console.WriteLine("{0} {1}", i, j)
En este ejemplo, el {0} se sustituir por el valor de la variable i, y el {1} por el valor de
la variable j.
Cuando se indican marcadores, estos deben coincidir con el nmero de parmetros, es
decir, si usamos el marcador {3}, debera existir ese parmetro, en caso de que haya
menos de 4 parmetros (de 0 a 3), se producir una excepcin.
Arreglos de Variables (Vectores y Matrices)
Un array permite referirse a una serie de elementos del mismo tipo con un mismo nombre que
estn almacenados de forma contigua en la memoria, y hace referencia un nico elemento de la
serie utilizando uno o ms ndices, como un vector o una matriz en lgebra.
Ejemplos Grafico de un vector:
V
Ing. Alberto Moreno Cueva
Pgina
1134
El vector se ha declarado de la siguiente manera: Dim V(4) as Integer
Y se ha llenado as:
V(0)=15
V(1)=21
V(2)=7
V(3)=18
V(4)=4
Otra forma de llenar un vector es al momento de declararlo:
Dim V() As Integer = {15, 21, 7, 18, 4}
Ejemplos Grafico de una Matriz:
La matriz se ha declarado de la siguiente manera: Dim M (2,3) as Integer
Y se ha llenado as:
M(0,0)=0
M(0,1)=1
M(0,2)=2
M(0,3)=3
M(1,0)=4
M(1,1)=5
. etc.
Ntese que para llenar una matriz se indica en que fila y columna se va a llenar. Por ejemplo
M
ndices de
Columna
ndices de Filas
Ing. Alberto Moreno Cueva
Pgina
1135
M(1,3) se esta refiriendo a la fila 1 columna 3
Otra forma de llenar una matriz es al momento de declararlo:
Dim M(,) As Integer = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 5, 8}}
Los arrays de variables podemos clasificarlos de la siguiente manera:
Por su mbito:
Public. La declaracin de un array pblico se hace en la seccin de declaraciones de un
mdulo (esto estar disponible para todo el proyecto)
Dimo Private. La declaracin de un array a nivel del mdulo o del formulario se hace en la
seccin de declaraciones del mdulo o del formulario utilizando la sentencia
Por su tamao:
Arrays estticos, cuya dimensin es siempre la misma.
Ejemplo:
Dim vector (19) As Double
Este ejemplo declara un array de una dimensin, llamado vector, con veinte elementos,
vector(0), vector(1), ... , vector(19), cada uno de los cuales permite almacenar un Double. Salvo
que se indique otra cosa, los ndices se empiezan a contar en cero.
Dim matriz(3, 5) As Integer
Este ejemplo declara un array de dos dimensiones, llamado matriz, con 4 x 6 elementos,
matriz(0,1), ... matriz(3,6), de tipo entero.
Public cadena(12) As String
El ejemplo anterior declara un array de una dimensin, cadena, con doce elementos,
caract(0), ... , caract(12), cada uno de los cules permite almacenar una cadena de caracteres.
Arrays dinmicos, cuya dimensin se puede modificar durante la ejecucin del programa.
El espacio necesario para un array esttico se asigna al iniciarse el programa y permanece fijo
durante su ejecucin. El espacio para un array dinmico se asigna durante la ejecucin del
programa. Un array dinmico, puede ser redimensionado en cualquier momento de la ejecucin.
La forma mejor de redimensionar los arrays es mediante variables.
Para crear un array dinmico primero hay que declararlo como si fuera una array esttico, pero sin
darle
Ing. Alberto Moreno Cueva
Pgina
1136
dimensin. Es decir, se deja la lista -entre parntesis- vaca sin ponerle ningn nmero. Esto se
hace con la sentencia Public si se quiere que sea global, con Dimo Private si se quiere a nivel de
mdulo o con Static, Dimo Private si se quiere que sea local.
Para asignar el nmero actual de elementos del array se utiliza la sentencia ReDim. La
sentencia ReDimpuede aparecer solamente en un procedimiento y permite cambiar el nmero de
elementos del array y sus lmites inferior y superior, pero no el nmero de dimensiones. Esto
quiere decir que, por ejemplo, no se puede trasformar un vector en una matriz.
Ejemplo:
'Aqu se declara el arreglo
Dim V() as integer
'Aqui se le asigna un tamao en este caso 4 elementos (del 0 al 3)
Redim Preserve V(3)
A continuacin se presenta un ejemplo de cmo se declaran arrays dinmicos. Si se declara el
array Matriz a nivel del formulario,
Dim Matriz( ) As Integer
ms tarde, un procedimiento Calculo puede asignar espacio para el array, como se indica a
continuacin:
Sub Calculo( )
...
ReDim Matriz(F, C)
...
End Sub
Cada vez que se ejecuta la sentencia ReDim, todos los valores almacenados en el array se
pierden (si son Variant se ponen a Empty; si son numricos a cero y si son cadenas de caracteres
a la cadena vaca). Cuando interese cambiar el tamao del array conservando los valores del
array, hay que ejecutar ReDimcon la palabra clave Preserve.
Propiedades de los Arreglos:
Entre las ms importantes tenemos:
Ing. Alberto Moreno Cueva
Pgina
1137
Length.- Devuelve la cantidad de elementos que tiene un arreglo
Ejemplo :
Dim v(4) as String
v.length() esto devolvera 5 , ya que el arreglo "v tiene 5 elementos (0 al 4)
Sort.- Ordena un arreglo. Se utiliza la clase Array
Ejemplo
Dim V(3) as Integer ={13,7,16}
Array.Sort(V) aqu la clase Array esta ordenado el Arreglo "V
CopyTo.- Copia los datos de un arreglo a otro en una posicin dada.
Sintaxis: Arreglo1.CopyTo (Arreglo2, Posicin)
Ejemplo
Dim V1(3) as Integer ={13,7,16}
Dim V2(3) as Integer
V1.CopyTo(V2,0) Aqu se esta copiando en el arreglo V2 a partir de la posicin 0 los datos que
hay en el arreglo V1
GetUpperBound (Indice_Dimension).- Esta funcin devuelve el ndice mayor de un arreglo.
Dim V(3) as Integer
Si nos damos cuenta el arreglo declarado es un arreglo de una dimensin.
Esta dimensin seria la dimensin 0
v.GetUpperBound(0) esto devolvera 3
Ahora si el arreglo tuviera2 dimensiones Dim M (2,3) as Integer, tendramos la dimensin 0 (0 al
2) y la dimensin 1 (0 al 3)
M.GetUpperBound (0) esto devuelve 2
M.GetUpperBound (1) esto devuelve 3
GetLowerBound (Indice_Dimension).- Esta funcin devuelve el ndice menor de un arreglo.
Casi siempre el ndice menor ser 0 al no ser que el arreglo empiece con otro ndice.
Ejemplos
Prcticos en
Ing. Alberto Moreno Cueva
Pgina
1138
Vb Net (Arreglos)
1.- Llene un vector de 5 elementos con nmeros aleatorios y mustrelos en un listbox
Public Class Form1
Dim vec (4) As Integer 'Se declara el vector
Private Sub Button2_Click(.) Handles Button2.Click
Dim I As Int16 : Dim N As Int16
'Hacemos un for desde 0 hasta el ndice mayor del arreglo en este caso 4
For I = 0 To Vec.GetUpperBound(0)
N = CInt (Rnd () * 100) 'Generamos el numero aleatorio
Vec (I) = N 'Guardamos el numero en el vector
'Agregamos al Listbox el dato del vector que se acaba de llenar
Me.ListBox1.Items.Add(vec(I))
Next
End Sub
End Class
2.- Ingrese un numero en una caja de texto, al hacer click en el
botn "Agregar se debe de agregar el numero a un arreglo
dinmico adems de mostrador en un listbox
Public Class Form2
'Aqu se declara el arreglo que es dinmico (ntese que no va
nada entre los parntesis)
Dim V () As Int16
'Este procedimiento se encarga de llenar el listbox con los datos
que tiene el vector
Sub Listar()
Ing. Alberto Moreno Cueva
Pgina
1139
Me.ListBox1.Items.Clear()
Dim i As Int16
Me.ListBox1.Items.Clear()
For i = 0 To V.GetUpperBound(0)
Me.ListBox1.Items.Add(V(i))
Next
End Sub
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
'Aqui se el asigna un elemento al vector (el ndice de ese elemento ser 0) ni bien carga el
'formulario
ReDim Preserve V(0)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim pos As Int16
pos = V.GetUpperBound (0) 'Capturamos el ndice mayor del arreglo
V (pos) = Me.TextBox1.Text 'Llenamos el vector en la ultima posicin el dato ingresado
ReDim Preserve V (pos + 1) 'Se le agrega un elemento mas al arreglo
End Sub
End Class
3.- Llene un vector de 100 elementos con nmeros aleatorios sin que estos se repitan y
mustrelos en un listbox
Public Class Form3
Dim Vec (99) As Integer 'Declaramos el vector
'Ahora creamos una funcin llamada "BuscarItem", esta funcin recibir
como parmetro un 'numero y se buscara en todo el vector.
'Si ese numero se encuentra la funcin devuelve "True" caso contrario
"False"
Ing. Alberto Moreno Cueva
Pgina
1140
Function BuscarItem(ByVal N%) As Boolean
Dim Estado As Boolean = False : Dim I As Integer
For I = 0 To Vec.GetUpperBound(0)
If Vec(I) = N Then
Estado = True
Exit For
End If
Next
BuscarItem = Estado
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim N As Int16 : Dim J As Int16 = 0
Me.ListBox1.Items.Clear()
Do While J <= Vec.GetUpperBound (0) 'Aqu se inicia el bucle para llenar los datos al vector
N = CInt (Rnd () * 100) 'Se genera el numero aleatorio
If Not BuscarItem(N) Then 'Llamamos a la funcin BuscarItem y le enviamos el numero
'generado si la funcin devuelve "False" quiere decir que no lo encontr.
'Si no lo encontr lo agrega al vector.
Vec(J) = N
Me.ListBox1.Items.Add (Vec (J)) 'Ademas de agrega a la lista
J = J + 1 'aumentamos el valor de la variable J que es la que esta controlando la
'posicin del vector que se esta llenando
End If
Loop
End Sub
End Class
Ing. Alberto Moreno Cueva
Pgina
1141
4.- Llene un vector dinmico con nombres de pases.
Al hacer click en el botn "Agregar se mostrara un INPUTBOX donde se debe de ingresar el
nombre del pas, inmediatamente se mostrara un mensaje indicando si se quiere continuar alo
cual si se responde "Si se repetir el proceso.
El proceso terminara cuando se responda "No
Adems hay un botn "Buscar que mostrar un INPUTBOX donde se ingresara el nombre de un
pas, si ese pas existe en el arreglo se seleccionara del Listbox, caso contrario se mostrara un
mensaje indicando que "No existe
Public Class Form4
Dim V () As String 'Se declara el arreglo dinmico
Private Sub CmdAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim Rpta As Integer, P As String
Dim I As Integer = 0
Do 'Empieza el proceso hasta cuando en el mensaje se responda "No"
P = InputBox ("Ingrese Pas") 'Se abre un cuadro de dialogo para ingresar un pas
ReDim Preserve V (I) 'Se agrega un elemento al vector
V (I) = P 'Se agrega el pas al vector
Me.ListBox1.Items.Add (UCase (V (I))) 'Se agrega el valor del vector al Listbox
'Se incrementa la variable "I" es la que controla la posicin del elemento que se esta llenando en le
'vector
I = I + 1
Ing. Alberto Moreno Cueva
Pgina
1142
'Aqu se muestra el mensaje y la respuesta se guarda en la variable "Rpta" (Son 2 posibles
'respuestas Si VbYes y No VbNo)
Rpta = MsgBox ("Desea Continuar...?", MsgBoxStyle.Question + MsgBoxStyle.YesNo,
"Confirmar")
Loop Until Rpta = vbNo
End Sub
Private Sub CmdBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim P As String : Dim Estado As Boolean = False
P = InputBox ("Ingrese pas a buscar") 'Se ingresa el pas a buscar
Dim I%
For I = 0 To V.GetUpperBound(0)
If UCase (P) = V (I) Then 'Se busca y si e encuentra se selecciona el listbox
Me.ListBox1.SelectedIndex = I
Estado = True
End If
Next
'Al final si Estado es igual "False" quiere decir que no se encontr
If Not Estado Then
MsgBox("No se encontr el pas", MsgBoxStyle.Critical, "Advertencia")
End If
End Sub
End Class
5.- Llene una matriz con nmeros aleatorios y
mustrelos en un "Listview
Public Class Form5
Dim m (4, 4) As Integer 'Se declara la matriz
'Este sub se encarga de llenar los datos de la matriz
Ing. Alberto Moreno Cueva
Pgina
1143
al Listview
Sub Llenar ()
Dim F%, C%
For F = 0 To m.GetUpperBound(0)
Me.ListView1.Items.Add(m(F, 0))
For C = 1 To m.GetUpperBound(1)
Me.ListView1.Items(F).SubItems.Add(m(F, C))
Next
Next
End Sub
Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim F%, C%
For F = 0 To m.GetUpperBound(0)
For C = 0 To m.GetUpperBound(1)
m(F, C) = CInt(Rnd() * 100)
Next
Next
Me.ListView1.Columns.Add("1", 40, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("2", 40, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("3", 40, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("4", 40, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("5", 40, HorizontalAlignment.Center)
Me.ListView1.View = View.Details
Call Llenar()
End Sub
End Class
Ing. Alberto Moreno Cueva
Pgina
1144
Bueno para este ejercicio 5 tenemos que tener en cuenta algo:
Se esta utilizando un "Listview para poder mostrar los datos de la matriz, este control permite
tener varias columnas y filas como si se tratase de una tabla
Para agrega una columna se hace lo sgte:
Me.ListView1.Columns.Add("1", 40, HorizontalAlignment.Center)
Aqu se esta agregando una columna llamada "1 que tiene de ancho 40 y su alineacin ser al
centro
Hay que tener en cuenta tambin:
Me.ListView1.View = View.Details
Esto hace que se vea las columnas, ya que sin esta propiedad no se podra ver los encabezados
de las columnas ni tampoco todas las filas creadas.
Ahora para llenar algo a un "ListView se hace:
Me.ListView1.Items.Add("Peru)
En este ejemplo se esta agregando "Per al listview, cada vez que se agrega un tem al Listview
este toma un ndice que empezara de 0
Que pasara si queremos seguir llenando mas pases en la misma fila pero en otras columnas?
La sentencia seria esta
Me.ListView1.Items(0).SubItems.Add("Bolivia)
Notese esto: Items(0).SubItems.Add("Bolivia)
Aqu dice que Bolivia ser un SubItem de la fila 0 sea se mostrara en otra columna que no sea la
principal (La principal seria la columna 0)
6.- Llene 2 matrices con nmeros aleatorios y en una tercera matriz guarde la suma de las 2
anteriores, muestre las matrices en "Listview
Public Class Form6
Dim m1(4, 4) As Integer
Ing. Alberto Moreno Cueva
Pgina
1145
Dim m2(4, 4) As Integer : Dim m3(4, 4) As Integer
'Se crea un procedimiento llamado "FormatoLista" es te recibe como parmetro el listview y le dar
'el formato correspondiente
Sub FormatoLista(ByRef Lista As ListView)
Lista.Columns.Add("1", 40, HorizontalAlignment.Center)
Lista.Columns.Add("2", 40, HorizontalAlignment.Center)
Lista.Columns.Add("3", 40, HorizontalAlignment.Center)
Lista.Columns.Add("4", 40, HorizontalAlignment.Center)
Lista.Columns.Add("5", 40, HorizontalAlignment.Center)
Lista.View = View.Details
End Sub
'Se crea un procedimiento llamado "Llenar" este recibe como parmetro el listview y el arreglo al
'cual llenara el Listview enviado
Sub Llenar(ByRef Lista As ListView, ByVal X(,) As Integer)
Dim F%, C%
For F = 0 To X.GetUpperBound(0)
Lista.Items.Add(X(F, 0))
For C = 1 To X.GetUpperBound(1)
Lista.Items(F).SubItems.Add(X(F, C))
Next
Next
End Sub
Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Randomize()
Dim F%, C%
'Aqui se llenan las 3 matrices con nmeros aleatorios
For F = 0
To
Ing. Alberto Moreno Cueva
Pgina
1146
m1.GetUpperBound(0)
For C = 0 To m1.GetUpperBound(1)
m1(F, C) = CInt(Rnd() * 100)
Next
Next
For F = 0 To m2.GetUpperBound(0)
For C = 0 To m2.GetUpperBound(1)
m2(F, C) = CInt(Rnd() * 100)
Next
Next
For F = 0 To m3.GetUpperBound(0)
For C = 0 To m3.GetUpperBound(1)
m3(F, C) = m1(F, C) + m2(F, C)
Next
Next
Call FormatoLista (Me.ListView1) 'Se le da formato al ListView1
Call FormatoLista(Me.ListView2)
Call FormatoLista(Me.ListView3)
Call Llenar (Me.ListView1, m1) 'Aqui se llena el Listview1 con la matriz m1
Call Llenar(Me.ListView2, m2)
Call Llenar(Me.ListView3, m3)
End Sub
End Class
7.- Llene 1 matriz con nmeros aleatorios muestrela en un ListView, Al hacer click en el botn
"Calcular se debe de mostrar la suma de su diagonal principal y secundaria.
Ing. Alberto Moreno Cueva
Pgina
1147
Public Class Form7
Dim m(4, 4) As Integer
Sub Llenar ()'Este sub llena de la matriz al ListView
Dim F%, C%
For F = 0 To m.GetUpperBound(0)
Me.ListView1.Items.Add(m(F, 0))
For C = 1 To m.GetUpperBound(1)
Me.ListView1.Items(F).SubItems.Add(m(F, C))
Next
Next
End Sub
Private Sub Form7_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim F%, C%
For F = 0 To m.GetUpperBound(0) 'Aqui se sella la matriz
For C = 0 To m.GetUpperBound(1)
m(F, C) = CInt(Rnd() * 10)
Next
Next
'Se le da formato al ListView
Me.ListView1.Columns.Add("1", 40, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("2", 40, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("3", 40, HorizontalAlignment.Center)
Ing. Alberto Moreno Cueva
Pgina
1148
Me.ListView1.Columns.Add("4", 40, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("5", 40, HorizontalAlignment.Center)
Me.ListView1.View = View.Details
Call Llenar()
End Sub
Private Sub CmdCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim F%, C%, Suma1%, Suma2%
For F = 0 To m.GetUpperBound(0)
For C = 0 To m.GetUpperBound(1)
If F = C Then
suma1 = suma1 + m(F, C)
End If
If F + C = 4 Then
Suma2 = Suma2 + m(F, C)
End If
Next
Next
Me.lbldiag1.Text = Suma1
Me.lbldiag2.Text = Suma2
End Sub
Ejercicios Propuestos (Arreglos)
1.- Al hacer clic en un botn "Agregar se ingresara en un "InputBox una cadena, esta cadena se
agregara a un vector dinmico y se mostrara en un listbox.
Luego se deber de ingresar Una letra en una caja de texto, al hacer clic en un botn "Buscar se
debe de mostrar la cantidad de veces que se repite esa letra en todo el arreglo dinmico.
2.- Generar 100 nmeros aleatorios y guardarlos en un arreglo.
Al hacer clic en un botn "Separar se deber de recorrer el arreglo anterior y se separaran los
pares de los
Ing. Alberto Moreno Cueva
Pgina
1149
impares en arreglos diferentes.
Los 3 arreglos se mostraran en un listbox
3.- Llenar una matriz de 5 x 5 con nmeros aleatorios sin que estos se repitan, luego mostrarlos en
un ListView
4.- Llenar un vector de 25 elementos con nmeros aleatorios, luego pasarlo a una matriz de 5 x 5
Mostrar el arreglo en un listbox y la matriz en un Listview
5.- Llenar 2 matrices de 5 x 5 con nmeros aleatorios, luego se deber de escoger entre un grupo
de opciones (Radiobutton) un signo de operacin que podr ser +, - , *, /.
Al hacer clic en un botn "Calcular se deber de llenar una tercera matriz con la operacin
seleccionado entre la matriz 1 y la matriz 2, es decir si se escoge el signo "+ por ejemplo se
deber de sumar cada elemento de la matriz 1 con la matriz 2
6. Llenar un vector con nmeros aleatorios.
Luego se debe de ingresar un nmero, si este existe se debe de eliminar dicho nmero del
arreglo.
Utilice un arreglo dinmico.
7.- Llenar un vector con 100 nmeros aleatorios del 1 al 20.
Luego la hacer clic en un botn "Resumen debe de salir en un listbox los nmeros que se
generaron en el arreglo pero sin repetirse.
ARREGLOS DE CONTROLES
EN Vb Net se puede hacer que un evento funcione para varios controles a esto se le denomina
"Arreglo de controles
Por ejemplo
En este formulario tenemos 3 botones queremos que el evento
click de los 3 botones sea el mismo para todos.
Para eso entramos al evento de cualquier botn por ejemplo el
primero (botn- Nuevo)
Inicialmente el botn estar as:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
End Sub
Ing. Alberto Moreno Cueva
Pgina
1150
Lo que se tiene que hacer es agregar los otros controles con su evento click
Al final el botn quedara as:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click, Button2.Click, Button3.Click
End Sub
De esta forma lo que se programe en el boton1_click funcionara para el botn2_click y el
boton3_click
Ahora podriamos programar esto:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click, Button2.Click, Button3.Click
Select Case sender.text
Case "Nuevo"
Call limpia()
Case "Calcular"
Call calcular()
Case "Salir"
End
End Select
End Sub
Donde "sender.text" devuelve el valor de la propiedad "Text" del botn al cual se hizo click.
Depende de eso se podr saber que botn se presiono.
Ahora miren lo
que se
Ing. Alberto Moreno Cueva
Pgina
1151
programo en el Textbox1 en le evento keypress
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress,
TextBox3.KeyPress, TextBox4.KeyPress
Select Case Asc(e.KeyChar)
Case 48 To 57
Case Else
MsgBox("Error solos e acepta Nmeros")
e.Handled = True
End Select
End Sub
Esta programacin sirve para que le texto solo acepte nmeros, pero si nos damos cuenta este
evento tambin funcionara para el textbox2, textbox3 y textbox4
Bueno aqu encontramos los procedimientos que son llamados cuando se presiona el botn
Calcular y Nuevo
Sub limpia()
Dim obj As Object
For Each obj In Me.Controls
If TypeOf obj Is TextBox Then
obj.text = ""
End If
Next
End Sub
Sub calcular()
Dim obj As Object
Dim Suma As Integer = 0
For Each obj In Me.Controls
Ing. Alberto Moreno Cueva
Pgina
1152
If TypeOf obj Is TextBox Then
Suma = Suma + Val(obj.text)
End If
Next
MsgBox("La suma de los nmeros es :" & Suma, MsgBoxStyle.Information, "Resultado")
End Sub
Ahora veremos como crear un arreglo de controles en forma dinmica
Public Class Form1
''Aqu se esta creando el evento click para MIBOTON1 (que sern todos los botones)
Private Sub Miboton1_Click(ByVal sender
As Object, ByVal e As System.EventArgs)
MsgBox(sender.tag)
End Sub
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim i As Integer
Dim Miboton As Button ''Se declara una variable de tipo button
For i = 1 To 3
Miboton = New Button ''Se crea un nuevo boton
Miboton.Text = "Boton" & i ''Se pone nombre a ese nuevo botn
Miboton.Top = 50 ''Se le da una ubicacin de arriba hacia abajo
Miboton.Left = (i * 100) ''Se le da una ubicacin de derecha a izquierda al botn
Miboton.Tag = i ''Se le pone un valor a la propiedad TAG para diferenciarlo de los dems
Me.Controls.Add (Miboton) ''Se agrega el botn al formulario
AddHandler
Ing. Alberto Moreno Cueva
Pgina
1153
Miboton.Click, AddressOf Miboton1_Click ''Se crea el evento click al botn
''Ojo el evento click se esta creando con el nombre de MIBOTON1
Next
End Sub
Ejemplos Prcticos en Vb Net (Arreglos de Controles)
1.- Disear un programa que simule el funcionamiento de una calculadora
Lo primero que debe de hacerse es crear 2 grupos de arreglos de
controles, el primer grupo de arreglos estar conformado por los
nmeros (del 0 al 9) y el otro grupo de arreglo estar conformado por
los signos (+,-,*, /)
Luego en el formulario programamos lo siguiente:
Public Class Form1
'Aqui se declaran las variables publicas para el formulario
Dim Signo As String, V1 As Integer, V2 As Integer
'Noten que aqu se esta programando en todos los botones de los
nmeros ya que es un arreglo.
Private Sub cmd0_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
cmd0.Click, cmd1.Click, cmd2.Click, cmd3.Click, cmd4.Click, cmd5.Click, cmd6.Click, cmd7.Click,
cmd8.Click, cmd9.Click
Me.txtnum.Text = Me.txtnum.Text & sender.text
End Sub
'Noten que aqu se esta programando en todos los signos ya que es un arreglo.
Private Sub cmdmas_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles cmdmas.Click, cmdmenos.Click, cmdpor.Click, cmdentre.Click
V1 = Val (txtnum.Text) 'Aqui guardamos lo que hay en le texto
Signo = sender.text 'Aqui se guarda el signo seleccionado
txtnum.Text = ""
End Sub
Ing. Alberto Moreno Cueva
Pgina
1154
'Aqu se calcula la operacin dependiendo del signo
Private Sub cmdigual_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles cmdigual.Click
Dim res As Integer : V2 = Val (txtnum.Text)
Select Case Signo
Case "+" : res = V1 + V2
Case "-" : res = V1 - V2
Case "*" : res = V1 * V2
Case "/" : res = V1 / V2
End Select
txtnum.Text = res
End Sub
End Class
2.- Disear un programa que simule el juego de un bingo
Este formulario llenara 25 botones con nmeros aleatorios, luego
cada segundo se mostrara en un Label y este se buscara en los
botones si se encuentra el botn se desactivara.
Public Class Form2
Dim Bolos (99) As Integer :Dim Cartilla (24) As Integer
Dim Nro%, Cont%
El arreglo bolos tendr nmeros del 1 al 100 en desorden.
La idea es que vayan saliendo los bolos uno por uno, pero para eso
antes en el arreglo ya debe de estar los nmeros generados
El arreglo cartilla tendr 25 nmeros aleatorios sin que estos se repitan.
La idea es llenar los botones con los nmeros que tendr este arreglo.
La funcin Buscar recibe un numero "N" que es el numero que se va a buscar, adems recibe otro
parmetro "V" (por referencia) este parmetro ser el arreglo donde se piensa buscar el numero
Ing. Alberto Moreno Cueva
Pgina
1155
"N"
Si el numero "N" se encuentra en el arreglo "V" la funcin devolver "true" caso contrario devolver
"false"
Function Buscar (ByVal N%, ByRef V () As Integer) As Boolean
Dim I% : Dim Sw As Boolean : Sw = False
For I = 0 to V.GetUpperBound (0)
If N = V (I) Then
Sw = True
Exit For
End If
Next
Buscar = Sw
End Function
El procedimiento "Llenar" se encarga de llenar un arreglo con nmeros aleatorios sin que estos se
repitan, recibe un parmetro llamado "V" (por referencia) este parmetro ser el arreglo donde se
piensa llenar los nmeros aleatorios
Sub Llenar (ByRef v () As Integer)
Dim I%, N%
Do While I <= v.GetUpperBound (0)
N = CInt (Rnd () * 99) + 1
If Not Buscar (N, v) Then
v(I) = N
I += 1
End If
Loop
End Sub
Ing. Alberto Moreno Cueva
Pgina
1156
El procedimiento "LlenaCartilla" se encarga de llenar los botones con lo que tiene el arreglo Cartilla
Sub LlenaCartilla ()
Dim Obj as Object : Dim I% : I = 0
For Each Obj In Me.Controls
If TypeOf Obj Is Button And Obj.tag <> "A" Then
Obj.text = Cartilla (I)
I += 1
End If
Next
End Sub
NOTA: Hay que tener en cuenta que al botn "Jugar" se le debe poner en la propiedad "TAG" la
letra "A"
El procedimiento "BuscarEnCartilla" se encarga de buscar el numero que saldr cada segundo en
los botones si se encuentra se desactivara le botn
Sub BuscarEnCartilla ()
Dim Obj As Object
For Each Obj In Me.Controls
If TypeOf Obj Is Button And Obj.tag <> "A" Then
If Trim (Obj.text) = Trim (Me.LblBolo.Text) Then
Obj.enabled = False
Cont += 1
Exit For
End If
End If
Next
If Cont = 25 Then
Ing. Alberto Moreno Cueva
Pgina
1157
Timer1.Enabled = False
MsgBox ("UD ha ganado el juego de bingo")
End If
End Sub
Private Sub cmdJugar_Click (ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles cmdJugar.Click
Call Llenar (Bolos) 'Aqu se llenan los bolos
Call Llenar (Cartilla) 'Aqu se llenan los nmeros de la cartilla
Call LlenaCartilla ()
Nro = 0
Cont = 0
Me.Timer1.Enabled = True
End Sub
'Aqui en el timer sale cada numero que hay en el arreglo "Bolo" y por cada numero que sale se
buscara en los botones
Private Sub Timer1_Tick (ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Timer1.Tick
Me.LblBolo.Text = Bolos (Nro) : Call BuscarEnCartilla () : Nro += 1
If Nro > Bolos.GetUpperBound (0) Then
Timer1.Enabled = False
End If
End Sub
End Class
ESTRUCTURAS DE DATOS
Las estructuras son parecidas que las enumeraciones pero con muchas ventajas, entre ellas que
cada elemento de la estructura puede ser de cualquier tipo integer, double, String o matriz,
adems, se pueden declaran funciones dentro de la estructura, constructores, mbito de variables
independientes.
Etc.
Nota: El timer1 deber de estar desactivado
inicialmente
Ing. Alberto Moreno Cueva
Pgina
1158
Una declaracin de estructuras empieza con la instruccin Structure, y finaliza con la instruccin
End Structure. Entre estas dos instrucciones debe declararse por lo menos un miembro.
Si desea mantener un nombre de empleado, su telfono y su salario juntos en una nica variable,
puede declarar una estructura para esta informacin de la siguiente manera:
Structure Empleado
Dim Nombre As String : Dim Telefono As String : Dim Salario As Decimal
End Structure
Ahora si declaramos una variable de ese tipo seria as:
Dim R as Empleado
Parra llenar datos en esa variable seria:
R.nombre=Anastacia : R.telefono=5682547 : R.salario=1000.00
Ahora si queremos llenar los datos de varios empleados, se tendra que declarar un arreglo e
empleados
Dim R(4) as Empleado
Para ingresar datos a la variable seria as:
R(0).nombre=Juan :R(0).telefono=2457810
R(0).salario=250 :R(1).nombre=Maria
R(1).telefono=4178920 :R(1).salario=590
R
Ing. Alberto Moreno Cueva
Pgina
1159
Y as sucesivamente
Creacin de Mens, Toolbar, ImageList y StatusBar
Imagelist
Es un control que va a permitir almacenar imgenes y cada imagen toma un ndice empezando de
0
Se agrega el ImageList
Luego nos vamos a sus propiedades y
escogemos la propiedad "Images
En la propiedad "Images iremos agregando las imgenes con las cuales vamos a trabajar
Toolbar
Ing. Alberto Moreno Cueva
Pgina
1160
Es un control que va a permitir insertar un barra de herramientas va de la mano con el control
IMAGELIST para colocar las imgenes por cada botn
Se agrega el toolbar al formulario
Una vez agregado nos vamos a sus propiedades y en la
propiedad "ImageList se escoge el imagelist del cual se
van a jalar las imgenes.
Luego se escoge la propiedad "Buttons
En la propiedad "Buttons se podr agregar botones al Toolbar haciendo click en el botn
"Agregar.
Una vez agregado el botn cambiamos sus propiedades como "Text ponemos el texto que va
mostrar, en "Tag se le pone un nombre que identificara al botn y en "ImageIndex se selecciona
el ndice de la imagen que se mostrara en ese botn.
Ing. Alberto Moreno Cueva
Pgina
1161
Una vez que ya se agregaron los botones se podr programar en el toolbar
. Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick
Select Case e.Button.Tag
Case "N" : Call NUEVO()
Case "G" : Call GRABAR()
Case "M" : Call MODIFICAR()
Case "E" : Call ELIMINAR()
Case "S" : Me.Close()
End Select
End Sub
La propiedad e.Button.Tag recupera el valor del "Tag que se le dio a cada botn.
Se supone que al botn "Nuevo se le puso "N en la propiedad "Tag, al grabar "G, etc.
Statusbar
Es un control que va a permitir insertar una barra de estado dentro de un formulario.
Se agrega el "StatusBar al formulario y hay que cambiar
la propiedad "ShowPanels y poner el valor de "True
(Esto permitir que se muestre los paneles que se van a
Ing. Alberto Moreno Cueva
Pgina
1162
crear)
Luego nos vamos a la propiedad "Panels y se mostrara la sgte. Ventana:
Aqu agregamos los paneles que tendr el
"StatusBar, por cada panel que se agrega
se cambia la propiedad "Text ya que aqu
se pondr lo que mostrara el panel.
Si se desea se podr dejar vaci.
Si se quiere llenar un panel de un
"Statusbar en ejecucin se har lo sgte:
Usu= Juana
Me.StatusBar1.Panels(1).Width = 350
Me.StatusBar1.Panels(1).Text = " Bienvenido Usuario " & usu
Donde Panels (1) es el ndice del panel con el cual se va a trabajar
Ejemplo Prctico en Vb Net (Estructuras de Datos)
1.- Realizar un mantenimiento al arreglo "Curso que tendr 3 campos (Codigo, Nombre y Precio)
'Primero en un modulo se crea una
estructura
Module Module1
Structure Curso
Dim Cod As String
Dim Nom As String
Ing. Alberto Moreno Cueva
Pgina
1163
Dim precio As Double
End Structure
End Module
Ahora en el formulario
Dim ndice%
Private Sub Cursos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Me.ListView1.View = View.Details
Me.ListView1.FullRowSelect = True
Me.ListView1.Columns.Add("Codigo", 50, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("Nombre", 100, HorizontalAlignment.Left)
Me.ListView1.Columns.Add("Precio", 100, HorizontalAlignment.Center)
Call listar()
End Sub
'Ir al primer registro del arreglo
Private Sub CmdInicio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Indice = 0 : Call Mostrar(Indice)
End Sub
'Ir al siguiente registro del arreglo
Private Sub CmdNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
If ndice >= C.GetUpperBound(0) - 1 Then
MsgBox ("Se ha llegado al fin del archivo")
Else
Indice = Indice + 1 : Call Mostrar(Indice)
End If
End Sub
Ing. Alberto Moreno Cueva
Pgina
1164
'Ir al anterior registro del arreglo
Private Sub CmdPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
If ndice <= 0 Then
MsgBox("Se ha llegado al inicio del Archivo")
Else
Indice = Indice 1 : Call Mostrar(Indice)
End If
End Sub
'Ir al ultimo registro del arreglo
Private Sub CmdUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Indice = C.GetUpperBound(0) - 1
Call Mostrar(Indice)
End Sub
'Depende del botn al cual se le hizo click se llamara a una rutina
Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick
Select Case e.Button.Tag
Case "N" : Call NUEVO()
Case "G" : Call GRABAR()
Case "M" : Call MODIFICAR()
Case "E" : Call ELIMINAR(Indice)
Case "S" : Me.Close()
End Select
End Sub
'Aqui vemos los procedimiento que sern llamados en el "ToolBar"
Sub listar()
Ing. Alberto Moreno Cueva
Pgina
1165
Dim I% : Me.ListView1.Items.Clear()
For I = 0 To C.GetUpperBound(0) - 1
Me.ListView1.Items.Add(C(I).Cod) : Me.ListView1.Items(I).SubItems.Add(C(I).Nom)
Me.ListView1.Items(I).SubItems.Add(C(I).precio)
Next
End Sub
Sub NUEVO()
Dim CODIGO as string, P as integer : P = C.GetUpperBound(0)
If P = 0 Then
txtcod.Text = "C001"
Else
CODIGO = C(P - 1).Cod : txtcod.Text = "C" &
Microsoft.VisualBasic.Right(CStr(Val(Microsoft.VisualBasic.Right(CODIGO, 3)) + 1001), 3)
End If
txtprecio.Text = "" : txtnom.Text = ""
txtnom.Focus()
End Sub
Sub GRABAR()
Dim P% : P = C.GetUpperBound(0)
C(P).Cod = txtcod.Text : C(P).Nom = txtnom.Text
C(P).precio = CDbl(txtprecio.Text) : ReDim Preserve C(P + 1)
Call listar()
End Sub
Sub MODIFICAR()
C(ndice).Cod = txtcod.Text : C(ndice).Nom = txtnom.Text
C(ndice).precio
Ing. Alberto Moreno Cueva
Pgina
1166
= CDbl(txtprecio.Text) : Call listar()
End Sub
Sub ELIMINAR()
For I = Indice To C.GetUpperBound(0) - 1
C(I) = C(I + 1)
Next
ReDim Preserve C(C.GetUpperBound(0) - 1)
Call listar()
End Sub
2.- Realizar una consulta donde se escoja un Curso de un combo y salgan las notas de ese curso.
Para eso se deber de crear 2 estructuras una llamad "Cursos y otra llamada "Notas
Antes que todo debemos de crear un
"MODULO"
En el Modulo se programa esto:
Structure Curso
Dim Cod As String : Dim Nom As String
Dim precio As Double
End Structure
Structure Nota
Dim codcur As String
Dim codalu As String : Dim not1 As Integer
Dim not2 As Integer
End Structure
'Se crean las estructuras
Public C(2) As Curso :Public N(3) As Nota
Ing. Alberto Moreno Cueva
Pgina
1167
'Se declaran la variable "C" que hace referencia a la estructura "Curso" y la variable "N" que hace
referencia ala estructura "Nota"
Se debe de crear un procedimiento llamado "main" en donde se ingresaran datos manualmente a
las variables "C" y "N"
Sub Main ()
C(0).Cod = "C001" : C(0).Nom = "Java" : C(0).precio = 250
C(1).Cod = "C002" : C(1).Nom = "SQL" : C(1).precio = 300
C(2).Cod = "C003" : C(2).Nom = "Flash" : C(2).precio = 180
N(0).codcur = "C001" : N(0).codalu = "Javier Santana"
N(0).not1 = 12 : N(0).not2 = 17 : N(1).codcur = "C001"
N(1).codalu = "Frank Rojas" : N(1).not1 = 12
N(1).not2 = 18 : N(2).codcur = "C003"
N(2).codalu = "Mia Solano" : N(2).not1 = 15
N(2).not2 = 12 : N(3).codcur = "C003"
N(3).codalu = "Very Grijalva" : N(3).not1 = 14
N(3).not2 = 16
'Se llama al formulario "form1"
Dim xform as new Form1 : Xform.showdialog()
End Sub
Nota: Cuando se ejecuta el proyecto el objeto inicial debe de ser el "Sub Main".
Para eso lo que se debe de hacer es ir al "Explorador de Soluciones" y escoger en "objeto Inicial"
el "Sub Main"
Esto har que el objeto a ejecutarse inicialmente sea el procedimiento creado llamado Main
Ahora en el formulario debemos de hacerlo siguiente:
Public Class Form2
'Aqui se llena el combo con lo que tiene el arreglo C
Private Sub
FrmNotasCurso
Ing. Alberto Moreno Cueva
Pgina
1168
_Load(.) Handles MyBase.Load
Dim F%
For F = 0 To C.GetUpperBound(0)
Me.CBOCURSOS.Items.Add(C(F).Nom)
Next
Me.ListView1.View = View.Details
Me.ListView1.Columns.Add("ALUMNO", 100, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("NOTA 1 ", 100, HorizontalAlignment.Center)
Me.ListView1.Columns.Add("NOTA 2 ", 100, HorizontalAlignment.Center)
End Sub
'Al escoger un curso deben de salir las notas de ese curso
Private Sub CBOCURSOS_SelectedIndexChanged(.) Handles
CBOCURSOS.SelectedIndexChanged
Dim OP$, Y%, J%, R%
OP = C(Me.CBOCURSOS.SelectedIndex).Cod : Me.ListView1.Items.Clear()
R = 0
For Y = 0 To N.GetUpperBound(0)
If OP = N(Y).CodCur Then
Me.ListView1.Items.Add(N(Y).nom)
Me.ListView1.Items(R).SubItems.Add(N(Y).not1)
Me.ListView1.Items(R).SubItems.Add(N(Y).not2)
R = R + 1
End If
Next
lbltotal.Text = R
End Sub
Ing. Alberto Moreno Cueva
Pgina
1169
TREEVIEW Y LISTVIEW
Treeview
El control Treeview de formularios Windows Forms muestra una jerarqua de nodos similar al
modo en que se muestran los archivos y las carpetas en el panel izquierdo del Explorador de
Windows. Cada nodo puede contener otros nodos, que se denominan nodos secundarios. Los
nodos primarios, nodos que contiene nodos secundarios, pueden mostrarse expandidos o
contrados. Si la propiedad CheckBoxes se establece en true, las vistas de rbol pueden mostrar
casillas de verificacin junto a los nodos. Entonces, es posible activar o desactivar nodos mediante
programacin establecimiento la propiedad Checked del nodo en true o false.
APLICACIN 1:
En esta aplicacin con Treeview, se agregara un nodo raz y en los nodos secundarios se
agregaran los datos.
Cdigo Fuente:
En el boton Add Categoras que tiene como
nombre btnCategorias.
Private Sub btnCategorias_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles btnCategorias.Click
TreeView1.Nodes.Clear() Limpiar los nodos
del TreeView1
TreeView1.Nodes.Add("Shapes") Creando
nodo raiz
TreeView1.Nodes.Add("Colores") Creando nodo raiz
HabilitarBotones()
End Sub
Sub HabilitarBotones()
btnColores.Enabled = True : btnFormas.Enabled = True
End Sub
Ing. Alberto Moreno Cueva
Pgina
1170
En el boton Add Colores => que tendra como nombre btnColores.
Private Sub btnColores_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnColores.Click
Dim nodo As TreeNode Representa un nodo del TreeView
'La coleccin de Nodes contiene todos los objetos TreeNode secundarios asignados al actual
objeto TreeNode.
'Al agregar, quitar o clonar un objeto TreeNode, se agregan o clonan todos los nodos del
arbol secundarios.
nodo = TreeView1.Nodes(1) : nodo.Nodes.Add("Azul")
nodo.Nodes.Add("Rojo") : nodo.Nodes.Add("Verde")
nodo.Expand() Para expandir todos los niveles de nodos de arbol secundarios en la
coleccin de Nodes.
End Sub
En el boton Add Formas (Shapes) => que tendra como nombre btnFormas.
Private Sub btnFormas_Click(..) Handles btnFormas.Click
Dim nodo As TreeNode : nodo = TreeView1.Nodes(0)
nodo.Nodes.Add("Cuadrado") : nodo.Nodes.Add("Triangulo")
nodo.Nodes.Add("Circulo") : nodo.Expand()
End Sub
En el boton Listar Todos => que tendra como nombre btnListado.
Private Sub btnListado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnListado.Click
TreeView1.Nodes.Clear()
Dim nodo As TreeNode
TreeView1.Nodes.Add("Shapes") : TreeView1.Nodes.Add("Colores")
TreeView1.Nodes.Add("Productos") : nodo = TreeView1.Nodes(0)
nodo.Nodes.Add("Cuadrado") : nodo.Nodes.Add("Triangulo")
nodo.Nodes.Ad
Ing. Alberto Moreno Cueva
Pgina
1171
d("Circulo") : nodo.Expand()
nodo = TreeView1.Nodes(1) : nodo.Nodes.Add("Azul")
nodo.Nodes.Add("Rojo") : nodo.Nodes.Add("Verde")
nodo.Expand() : nodo = TreeView1.Nodes(2)
nodo.Nodes.Add("Azucar") : nodo.Nodes.Add("Arroz")
nodo.Nodes.Add("Menestras") : nodo.Expand()
End Sub
En el boton Ordenar tems => que tendra como nombre btnOrdenarItems.
Private Sub btnOrdenarItems_Click(.) Handles btnOrdenarItems.Click
obtiene o establece un valor que indica si los nodos de arbol de la vista del arbol estan
ordenados.
Es True si los nodos de arbol de la vista de arbol estan ordenados, en caso contrario ,
es false.
TreeView1.Sorted = True
End Sub
En el boton Ordenar Listado => que tendra como nombre btnOrdenarListado.
Private Sub btnOrdenarListado_Click(.) Handles btnOrdenarListado.Click
TreeView1.Sorted = True
btnListado_Click(sender, e) Llamando al boton Listar Todos en el evento Clic.
End Sub
En el boton Limpiar Control => que tendra como nombre btnLimpiar.
Private Sub btnLimpiar_Click(.) Handles btnLimpiar.Click
TreeView1.Nodes.Clear() : DeshabilitarBotones()
End Sub
Sub DeshabilitarBotones()
btnColores.Enabled = False : btnFormas.Enabled = False
Ing. Alberto Moreno Cueva
Pgina
1172
End Sub
En el boton Mover Arbol => que tendra como nombre btnMoverArbol.
Private Sub btnMoverArbol_Click(.) Handles btnMoverArbol.Click
Try
Dim nodocolor, nodoshape, nodosolidos As TreeNode
nodocolor = TreeView1.Nodes(0) : nodoshape = TreeView1.Nodes(1)
nodosolidos = TreeView1.Nodes(2) : TreeView1.Nodes.Clear()
TreeView1.Nodes.Add("Items movidos")
TreeView1.Nodes(0).Nodes.Add(nodocolor)
TreeView1.Nodes(0).Nodes.Add(nodoshape)
TreeView1.Nodes(0).Nodes.Add(nodosolidos)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Mostrar el dato seleccionado en el TreeView usando el evento AfterSelect.
AfterSelect => Se produce despus de seleccionarse el nodo de arbol.
Datos del Evento => El controlador de eventos recibe un argumento de tipo TreeViewEventArgs
que contiene datos relacionados con este evento. Las siguientes propiedades de
TreeViewEventArgs proporcionan informacin especfica para el evento.
Private Sub TreeView1_AfterSelect(.) Handles TreeView1.AfterSelect
'Mostrar el dato del nodo seleccionado
Dim nodo As TreeNode
nodo = TreeView1.SelectedNode
MessageBox.Show(nodo.Text)
End Sub
Listview
Ing. Alberto Moreno Cueva
Pgina
1173
APLICACIN 2:
Usando el ListView, realizar un ingreso de datos en el ListView1. [FrmListView.vb]
Configurando el ListView
Propiedades:
GridLines= True
View = Details
Name = ListView1
Columns = [Coleccin] <= le damos un clic en
botn.
Definiendo el diseo de las columnas con su
respectivo ancho de cada uno, donde se almacenaran
cada fila proveniente de los controles del GroupBox1.
Agregaremos 5 Columnas:
Columna 1: ColumnHeader1
Propiedades:
Name= ColumnHeader1
Text = Nombres y Apellidos
Width = 120
Columna 3: ColumnHeader3
Propiedades:
Name = ColumnHeader3
Text = Telefono
Width = 70
Column 4: ColumnHeader4
Propiedades:
Name = ColumnHeader4
Text = Ciudad
Width = 80
Column 5: ColumnHeader5
Propieades:
Name = ColumnHeader5
Text = Sexo
Width = 70
Ing. Alberto Moreno Cueva
Pgina
1174
Columna 2: ColumnHeader2
Propiedades:
Name = ColumnHeader2
Text = Direccion
Width = 120
Propiedaes de los controles:
Button 1 :
Name = CmdAdicionar
Text = &Adicionar
Button 2:
Name = CmdNuevo
Text = &Nuevo
Button 3:
Name = CmdLimpiar
Text = Limpiar ListView
Button 4:
Name = CmdSalir
Text = Salir
Cdigo Fuente:
Public Class FrmListView
Private Sub FrmListView_Load(.) Handles MyBase.Load
LimpiarControles() : CmbCiudad.Items.Add("[Seleccione]")
CmbCiudad.Items.Add("Lima") : CmbCiudad.Items.Add("Piura")
CmbCiudad.Ite
Label1:
Name = lbltotal
Text = lbltotal
Label2:
Text = Total de Elementos
GroupBox1:
Text = INGRESO DE DATOS
GroupBox2:
Text = MOSTRAR DATOS
RadioButton1
Name = OptM
Text = Masculino
Ing. Alberto Moreno Cueva
Pgina
1175
ms.Add("Ica") : CmbCiudad.Items.Add("Tumbes")
CmbCiudad.Items.Add("Puno") : CmbCiudad.SelectedIndex = 0
End Sub
Sub LimpiarControles()
Dim obj As Object
For Each obj In GroupBox1.Controls
If TypeOf obj Is TextBox Then obj.text = ""
If TypeOf obj Is RadioButton Then obj.checked = False
Next
End Sub
Private Sub CmdSalir_Click() Handles CmdSalir.Click
If MessageBox.Show("Desea Salir", "ListView", 4, 32) = 6 Then
Application.Exit()
End If
End Sub
Private Sub CmdAdicionar_Click(.) Handles CmdAdicionar.Click
'Validando las cajas de texto antes de ingresar el dato al ListView1.
If txtnombres.Text = "" Or txtDireccion.Text = "" Or txtTelefono.Text = "" Or CmbCiudad.Text =
"[Seleccione]" Then
MessageBox.Show("Ingrese un Dato", "Validando Datos")
Exit Sub
End If
'Representa un elemento de un control ListView.
Dim Lvitem As ListViewItem
Lvitem = ListView1.Items.Add(txtnombres.Text)
Lvitem.SubItem
Ing. Alberto Moreno Cueva
Pgina
1176
s.Add(txtDireccion.Text) : Lvitem.SubItems.Add(txtTelefono.Text)
Lvitem.SubItems.Add(CmbCiudad.Text) : Dim sexo As String
If OptM.Checked Then 'Verificando la seleccin del Radiobutton
sexo = "Masculino"
Else
sexo = "Femenino"
End If
Lvitem.SubItems.Add(sexo)
lbltotal.Text = ListView1.Items.Count
End Sub
'Validando el ingreso de datos, en las cajas de texto.
Private Sub txtnombres_KeyPress(.) Handles txtnombres.KeyPress
If Not SoloLetras(Asc(e.KeyChar), txtnombres, txtDireccion) Then
e.Handled = True
End If
End Sub
Private Sub txtDireccion_KeyPress(.) Handles txtDireccion.KeyPress
If Not LetrasNumeros(Asc(e.KeyChar), txtDireccion, txtTelefono) Then
e.Handled = True
End If
End Sub
Function LetrasNumeros(ByVal num As Integer, Optional ByVal obj_1 As Object = Nothing,
Optional ByVal obj_2 As Object = Nothing) As Boolean
LetrasNumeros = True
Select Case num
Case 8,
32, 44, 46
Ing. Alberto Moreno Cueva
Pgina
1177
'8=retroceso,32=avance,44=coma(,),46=punto(.)
Case 65 To 90 '65 hasta 90 =(A-Z)
Case 97 To 122 '97 hasta 122 =(a-z)
Case 241, 209 '241=,209=
Case 48 To 57 '48 hasta 57=(0-9)
Case 13 'Tecla Enter
If obj_1.text = "" Then
MessageBox.Show("No Ingreso el Dato", "Validando Datos")
obj_1.focus()
Exit Function
Else
obj_2.focus()
End If
Case Else
Return False
End Select
End Function
Function SoloLetras(ByVal num As Integer, Optional ByVal objtext_1 As Object = Nothing,
Optional ByVal objtext_2 As Object = Nothing) As Boolean
SoloLetras = True
Select Case num
Case 8, 32, 44
Case 65 To 90
Case 97 To 122
Case 241, 209
Case 13
Ing. Alberto Moreno Cueva
Pgina
1178
If objtext_1.Text = "" Then
MessageBox.Show("No ingreso el Dato", "Validando Datos")
objtext_1.focus()
Exit Function
Else
objtext_2.Focus()
End If
Case Else
Return False
End Select
End Function
Function SoloNumeros(ByVal num As Integer, Optional ByVal obj_1 As Object = Nothing, Optional
ByVal obj_2 As Object = Nothing) As Boolean
SoloNumeros = True
Select Case num
Case 8, 32, 44
Case 48 To 57
Case 13
If obj_1.text = "" Then
MessageBox.Show("No Ingreso el Dato", "Validando Datos")
obj_1.focus()
Exit Function
Else
obj_2.focus()
End If
Case Else
Ing. Alberto Moreno Cueva
Pgina
1179
Return False
End Select
End Function
Private Sub txtTelefono_KeyPress(.) Handles txtTelefono.KeyPress
If Not SoloNumeros(Asc(e.KeyChar), txtTelefono, CmbCiudad) Then
e.Handled = True
End If
End Sub
Private Sub CmdNuevo_Click(.) Handles CmdNuevo.Click
Call LimpiarControles()
txtnombres.Focus()
CmbCiudad.SelectedIndex = 0
End Sub
Private Sub CmdLimpiarLV_Click(.) Handles CmdLimpiarLV.Click
'Limpiar ListView1
ListView1.Items.Clear()
txtnombres.Focus()
End Sub
End Class
Ejecutando el Programa:
PROCEDIMIENTOS Y FUNCIONES
DEFINIDAS POR EL USUARIO
SUB (Instruccin).- Es un conjunto de
instrucciones que el compilador procesa y se
utiliza para procesar tareas repetitivas; todo
procedimiento o subrutina tiene que, Declararse
el nombre, los argumentos, y el cdigo que
componen el
Ing. Alberto Moreno Cueva
Pgina
1180
cuerpo de un procedimiento Sub.( Un procedimiento no devuelve valores)
Sintaxis
[Private | Public | [Static] Sub nombre [(lista_argumentos)]
[instrucciones]
[Exit Sub]
[instrucciones]
End Sub
La sintaxis de la instruccin Sub consta de las siguientes partes:
Parte Descripcin
Public Opcional. Indica que el procedimiento Sub es accesible para todos los dems procedimientos de todos los
mdulos. Si se usa en un mdulo que contiene una instruccin Option Private, el procedimiento no est
disponible fuera del proyecto.
Private Opcional. Indica que el procedimiento Sub es accesible slo para otros procedimientos del mdulo en el que
se declara.
Static Opcional. Indica que las variables locales del procedimiento Sub se conservan entre distintas llamadas. El
atributo Static no afecta a las variables que se declaran fuera de Sub, incluso aunque se usen en el
procedimiento.
nombre Requerido. Nombre del procedimiento Sub; sigue las convenciones estndar de nombres de variable.
lista_
argumentos
Opcional. Lista de variables que representan los argumentos que se pasan al procedimiento Sub cuando se le
llama. Las distintas variables se separan mediante comas.
instrucciones Opcional. Cualquier grupo de instrucciones que se ejecutan dentro del procedimiento Sub.
El argumento lista_argumentos consta de las siguientes partes y sintaxis:
[Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo] [= valor_predeterminado]
Parte Descripcin
Optional Opcional. Palabra clave que indica que no se requiere ningn argumento. Si se usa, todos los argumentos
subsiguientes de lista_argumentos tambin deben ser opcionales y declararse mediante la palabra clave
Optional. Optional no se puede utilizar para ningn argumento si se usa ParamArray.
Ing. Alberto Moreno Cueva
Pgina
1181
ByVal Opcional. Indica que el argumento se pasa por valor.
ByRef Opcional. Indica que el argumento se pasa por referencia. ByRef es el modo predeterminado en Visual Basic.
ParamArray Opcional. Slo se utiliza como el ltimo argumento de lista_argumentos para indicar que el argumento final es una
matriz Optional de elementos tipo Variant. La palabra clave ParamArray le permite proporcionar un nmero
arbitrario de argumentos. No se puede utilizar con ByVal, ByRef u Optional.
nombre_
variable
Requerido. Nombre de la variable que representa el argumento; sigue las convenciones estndar de nombres de
variables.
Tipo Opcional. El tipo de datos del argumento que se pasa al procedimiento; puede ser Byte, Boolean, Integer, Long,
Currency, Single, Double, Decimal (no admitido actualmente), Date, String (solamente longitud variable), Object,
Variant, o un tipo de objeto especfico. Si el parmetro no es Optional, se puede especificar tambin un tipo
definido por el usuario.
valor_
predeterminado
Opcional. Cualquier constante o expresin de constante. Slo es vlido para parmetros Optional. Si el tipo es
Object, un valor predeterminado explcito slo puede ser Nothing.
Comentarios
Si no se especifica explcitamente mediante Public, Private o Friend, los procedimientos Sub son
pblicos de manera predeterminada. Si no se usa Static, el valor de las variables locales no se
mantiene entre distintas llamadas.
Precaucin Los procedimientos Sub pueden ser recursivos; es decir, se pueden llamar a s
mismos para realizar una tarea determinada. Sin embargo, esto puede llevar al desbordamiento
de la pila. La palabra clave Static generalmente no se utiliza con procedimientos recursivos Sub.
Las palabras clave Exit Sub causan la inmediata salida de un procedimiento Sub.
Para llamar a un procedimiento Sub, use el nombre del procedimiento seguido de la lista de
argumentos.
Ejemplo de la instruccin Sub
En este ejemplo se utiliza la instruccin Sub para declarar el nombre, los argumentos y el cdigo
que forman el cuerpo del procedimiento Sub.
' Definicin del procedimiento Sub.
' Procedimiento Sub con dos argumentos.
Sub SubAreaPC(Largo, Ancho)
Dim Area As Double ' Declara la variable local.
If Largo = 0 Or Ancho = 0 Then
' Si cualquier argumento = 0.
Exit Sub ' Sale inmediatamente de Sub.
End If
Ing. Alberto Moreno Cueva
Pgina
1182
Area = Largo * Ancho ' Calcula el rea del rectngulo.
Debug.Print Area ' Imprime el rea en la ventana de depuracin.
End Sub
'Procedimiento que limpia los Cuadros de Texto
Public Sub Limpiar()
Dim X As Object
For Each X In Form1.Controls
If TypeOf X Is TextBox Then
X.Text = ""
End If
Next X
End Sub
Function (Instruccin).-
Es similar a una subrutina a diferencia que va devolver un valor , de acuerdo al tipo de funcin
declarada.
Declara el nombre, los argumentos y el cdigo que componen el cuerpo de un procedimiento
Function.
[Public | Private | Friend] [Static] Function nombre [(lista_argumentos)] [As tipo]
[instrucciones]
[nombre = expresin]
[Exit Function]
[instrucciones]
[nombre = expresin]
End Function
La sintaxis de la instruccin Function consta de las siguientes partes:
El argumento lista_argumentos tiene la siguiente sintaxis y partes:
[Optional] [ByVal | ByRef] [ParamArray] nombre_variable[( )] [As tipo] [= valor_predeterminado]
Las clausulas de las funciones son similares a los procedimientos.
Precaucin Los procedimientos Function pueden ser recursivos; es decir, pueden llamarse a s
mismos para realizar una tarea determinada. Sin embargo, la recursin puede provocar el
desbordamiento de pila. La palabra clave Static no se suele utilizar con procedimientos Function
recursivos.
Ing. Alberto Moreno Cueva
Pgina
1183
La ejecucin del programa contina con la instruccin que sigue a la instruccin que llam al
procedimiento Function.
Ejemplo de la instruccin Function
En este ejemplo se utiliza la instruccin Function para declarar el nombre, los argumentos y el
cdigo que forman el cuerpo de un procedimiento Function. El ltimo ejemplo utiliza argumentos
Optional inicializados.
' La siguiente funcin definida por el usuario devuelve
' la raz cuadrada del argumento que se le pasa.
Function CalculaRaizCuadrada(ArgNumerico As Double) As Double
If ArgNumerico < 0 Then ' Se evala el argumento.
Exit Function ' Salida hacia el procedimiento.
Else
CalculaRaizCuadrada = Sqr(ArgNumerico) ' Devuelve la raz cuadrada
End If
End Function
Function CalcSum(ByVal ParamArray Args() As Double) As Object
' The function can be invoked as follows:
Dim ReturnedValue As Object
ReturnedValue = CalcSum(4, 3, 2, 1)
' Variables locales:
' Args(0) = 4, Args(1) = 3, and so on.
El uso de la palabra clave ParamArray permite que una funcin acepte un nmero variable de
argumentos. En la siguiente definicin, PrimerArg se transfiere por valor.
Aplicacin.-Empleando Funciones pasando parametros variables
Ejemplo.-
Dim intSum As Integer
Public Function minimo(ByVal ParamArray obj() As
Integer) As Integer
Dim z, con, min As Integer
con = 1
For Each z In obj
If con = 1 Then Min = z
If z < Min Then Min = z
Ing. Alberto Moreno Cueva
Pgina
1184
con = con + 1
Next
Return Min
End Function
Sub Sum(ParamArray Nums() as integer)
Dim y,x As Integer
For Each x In Nums
y = y + x
Next x
intSum = y
End Sub
Private Sub Cmdcalculo_Click()
Sum Text2, Text3, Text4
Lbr1.Caption = intSum
Lbr2.Caption = minimo(Textbox1.text, Textbox2.text, Textbox3.text)
Lbr3.Caption = minimo(5,7,3,8)
'la suma de 3 valores
Sum Text1, Text3, Text4
MsgBox "la suma del texto 1,3y 4 " & intSum
End Sub
Ejercicios
1) Escribir una funcin que dados a y b enteros devuelva ab.
2) Escribir una funcin que dado un nmero entero, devuelva una seal que indique si dicho
nmero es primo o no.
3) Escribir una funcin que dados 2 nmeros, calcule el porcentaje que el primero representa
Acepta un arreglo de datos y pueden ser
de cualquier tipo, nums es una variable
cualquiera receptor de datos
Llamado a la funcion y
al procedimiento
Ing. Alberto Moreno Cueva
Pgina
1185
respecto del segundo.
4) Escribir una funcin que dados a y b devuelva el cociente de la divisin entera, sin utilizar el
operador correspondiente del lenguaje. Validar los tipos de datos de entrada.
5) Escribir una funcin que dados a y b devuelva el resto de la divisin entera, sin utilizar el
operador correspondiente de lenguaje. Validar los tipos de datos de entrada.
6) Escribir una funcin que dado un cdigo numrico de m dgitos, separe un sub-cdigo
consistente en una cantidad n<m de dgitos a partir del k-simo lugar a contar del dgito menos
significativo. Utilizarla en un programa que ingrese un listado de cdigos numricos
junto con sus correspondientes parmetros m,n y k y liste dichos cdigos de entrada junto
con el sub-cdigo deseado.
7) Un nmero entero positivo se dice perfecto si es igual a la suma de todos sus divisores.
excepto el mismo.
Ejemplo: los nmeros 6 (1+2+3), 28 (1+2+4+7+14) y 496 (1+2+4+8+16+31+62+124 +248)
son perfectos.
Se pide:
a) Escribir una funcin booleana que llamada desde un programa, permita discernir si un
nmero (nico parmetro) es perfecto.
b) Dar un ejemplo de cmo se hace referencia a dicha funcin desde un programa o desde
otro subprograma.
Nota: no usar variables globales.
8) Dos nmeros se dicen amigos cuando uno de ellos es igual a la suma de todos los divisores
del otro excepto el mismo.
Ejemplo: los nmeros 220 (1+2+4+5+10+11+20+22+44+55+110=284)
y 284 (1+2+4+71+142=220) son amigos.
Se pide:
a) escribir una funcin booleana que llamada desde un programa, permita discernir si dos
nmeros (parmetros) son amigos.
b) Usar otra
funcin para
Ing. Alberto Moreno Cueva
Pgina
1186
calcular la suma de los divisores de un nmero determinado.
c) Hacer referencia a dichas funciones desde un programa o desde otro subprograma.
Ejercicios propuestos
Desarrollar los siguientes procedimientos cuyos nombres y parmetros por valor se detallan en
cada procedimiento:
1. Funcin ACUADRADO pasando como valor un lado devuelva su rea. A=L
2
2. Funcin MAYOR pasando como valores dos nmeros devuelva el valor mximo de dichos
nmeros.
3. Funcin ATRIANGULO pasando como valor tres lados de un tringulo, en caso de que forme
un tringulo devuelva su rea, de lo contrario devuelva un valor 0.
A = Sp x (Sp-La) x (Sp-Lb) x (Sp Lc)
4. Subrutina INTERCAMBIO pasando dos parmetros por referencia intercambie el contenido
de dicho nmeros.
5. Funcin MINIMO pasando tres valores numricos de tipo real devuelva el menor valor.
6. Funcin MCD pasando dos valores numricos devuelva el Mximo comn Divisor de dichos
nmeros.
7. Subrutina PROMEDIO el cual pasando dos parmetros por valor y uno por referencia devuelva
el promedio de dichos nmeros.
8. Funcin PRIMO pasando por valor un nmero entero devuelva True si el nmero es Primo y
False si el nmero no es primo.
9. Funcin CUENTAVOCALES el cual pasando como parmetro una frase devuelva la cantidad
de vocales contenidas en dicha frase.
Ejemplo CUENTAVOCALES("VISUAL BASIC) -------- 5
10. Funcin SEGPALABRA el cual pasando como parmetro una FRASE, devuelva la segunda
palabra de dicha frase.
Ejemplo: SEGPALABRA("CURSO VISUAL BASIC) -------- VISUAL
11. Crear una funcin Recursiva FACTORIAL el cual pasando como parmetro un nmero
devuelva el Factorial de dicho nmero el procedimiento debe se recursivo.
Nota : Las funciones debe tener su respectiva llamada.
PROBLEMAS PROPUESTOS
NOTA : A cada funcin elaborada debe darle un nombre adecuado , deber ser llamado en
diferentes formularios (agregarlo a un mdulo).
1. Funcin pasando como parmetro un nmero de mes (1 al 12), devuelva la cantidad de das
de 1dicho Mes, considere el presente ao.
2. Pasando como parmetro la base y la altura de un tringulo rectngulo devuelva su
hipotenusa.
3. Pasando un monto en soles y el tipo de cambio, devuelva el monto convertido a Dlares.
Ing. Alberto Moreno Cueva
Pgina
1187
4. Pasando tres nmeros devuelva el Mnimo Comn Mltiplo, de dichos nmeros.
5. Pasando un nmero entero de cualquier longitud, devuelva el promedio de dichas cifras.
6. Pasando un nmero entero de cualquier longitud, devuelva el dgito mayor.
7. Pasando un nmero entero de cualquier longitud, devuelva el mismo valor de manera
ordenada.
8. Pasando un nmero de Mes que devuelva dicho Mes en Letras.
9. Pasando una subcadena, una cadena y una posicin que permita INSERTAR la subcadena en
dicha cadena a partir de una posicin especificada.
Ejemplo : INSERTAR("PROGRAMA ",VISUAL BASIC, 8) ---- VISUAL PROGRAMA BASIC
10. Pasando una cadena, una posicin inicial y el nmero de caracteres a borrar ELIMINE una
subcadena de dicha cadena a partir de una posicin especificada.
Ejemplo : DELETEAR("VISUAL BASIC, 7, 6) ---- VISUAL
11. Pasando tres nmeros que representan el da, mes y ao devuelva una fecha como cadena.
Ejemplo: FECHA(02, 12, 03) ---- 02 de Diciembre del 2003
12. Pasando un valor entero de grados centgrados y un carcter ( R, K, F) que representan
Ranking, Kelvin y Fahrenheit respectivamente, devuelva su valor de conversin al grado
especificado.
Fecha de presentacin :
Grupo mximo : 2 alumnos
Nota : Las funciones sern llamados desde diferentes formularios.
Modo de Presentacin : Slo en Usb.
Control ToolStrip (Clase)
Proporciona un contenedor para los objetos de barra de herramientas de Windows.
ToolStrip es la clase base abstracta para MenuStrip, StatusStrip y ContextMenuStrip.
Utilice ToolStrip y sus clases asociadas en nuevas aplicaciones de Windows Forms para crear
barras de herramientas que pueden tener una apariencia y un comportamiento de Windows XP,
Office, Internet Explorer o personalizados, todas ellas con o sin temas, con posibilidad de
desbordamiento y reordenacin de elementos en tiempo de ejecucin. Los controles ToolStrip
tambin proporcionan una experiencia completa en tiempo de diseo que incluye la activacin y
edicin en contexto, diseo personalizado, y uso compartido del espacio horizontal o vertical
dentro de un ToolStripContainer especificado.
La clase ToolStrip proporciona muchos miembros que administran el dibujo y la entrada de datos
mediante mouse (ratn) y teclado, adems de la funcionalidad de arrastrar y colocar. Utilice la
clase
Ing. Alberto Moreno Cueva
Pgina
1188
ToolStripRenderer con la clase ToolStripManager para tener an ms control y posibilidad de
personalizacin del estilo de dibujo y de diseo de todos los controles ToolStrip en un formulario
Windows Forms.
Los elementos siguientes estn diseados especficamente para trabajar sin problemas con
ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Estn
disponibles de forma predeterminada en tiempo de diseo para el control ToolStrip:
ToolStripButton
ToolStripSeparator
ToolStripLabel
ToolStripDropDownButton
ToolStripSplitButton
ToolStripTextBox
ToolStripComboBox
Puede unir controles ToolStrip en un ToolStripContainer especificado y combinar controles
ToolStrip entre s. Utilice ToolStripPanel en lugar de ToolStripContainer para las aplicaciones de
interfaz de mltiples documentos (MDI). Normalmente, ToolStrip no participa en el orden de
tabulacin a menos que tenga una posicin absoluta en lugar de estar acoplado o en un
ToolStripPanel.
Utilice la clase ToolStripControlHost para alojar cualquier otro control de formularios Windows
Forms en ToolStrip.
De forma predeterminada, ToolStrip se almacena en bfer doble, para lo que aprovecha la
configuracin de OptimizedDoubleBuffer.
Aunque el control ToolStrip reemplaza y agrega funcionalidad al control ToolBar de versiones
anteriores, se conserva ToolBar a efectos de compatibilidad con versiones anteriores y uso futuro,
en su caso.
Ejemplo 18
Ing. Alberto Moreno Cueva
Pgina
1189
En el ejemplo de cdigo siguiente se muestra cmo agregar un ToolStripContainer y un
ToolStrip a un formulario Windows Forms, cmo agregar elementos a ToolStrip y cmo agregar
ToolStrip al TopToolStripPanel de ToolStripContainer.
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private toolStripContainer1 As ToolStripContainer
Private toolStrip1 As ToolStrip
Public Sub New()
InitializeComponent()
End Sub 'New
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub 'Main
Private Sub InitializeComponent()
toolStripContainer1 = New System.Windows.Forms.ToolStripContainer()
toolStrip1 = New System.Windows.Forms.ToolStrip()
' Add items to the ToolStrip.
toolStrip1.Items.Add("One") : toolStrip1.Items.Add("Two")
toolStrip1.Items.Add("Three")
' Add the ToolStrip to the top panel of the ToolStripContainer.
toolStripContainer1.TopToolStripPanel.Controls.Add(toolStrip1)
Ing. Alberto Moreno Cueva
Pgina
1190
' Add the ToolStripContainer to the form.
Controls.Add(toolStripContainer1)
End Sub 'InitializeComponent
End Class 'Form1
Cuadros de Dialogo (MsgBox,Messagebox,InputBox, OpenFileDialog,ColorDialog,
FontDialog)
MessageBox .- Muestra un mensaje
MessageBox.Show("texto","titulo",boton,Icono)
Ejemplo: Mostrar el sgte mensaje
Dim Nom As String = "Juana"
MessageBox.Show("Bienvenido " & Nom, "Acceso",
MessageBoxButtons.OK, MessageBoxIcon.Information)
Ejemplo: Mostrar un mensaje si se desea salir, si se presiona si se cerrara la aplicacin.
Private Sub cmdsalir_Click
If MessageBox.Show("Desea Salir", "Confirmar", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) = DialogResult.Yes Then
End
End If
MsgBox .- Muestra un mensaje
MsgBox(mensaje,botones,titulo)
Msgbox ("Ingrese un precio valido, MsgBoxStyle
.Critical,Mensaje)
Boton Salir:
If MsgBox("Desea Salir", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Confirmar") =
MsgBoxResult.Yes Then
End
End If
InputBox. Se utiliza cuando se necesita que el usuario introduzca alguna informacin. La sntaxis
correcta es:
Ing. Alberto Moreno Cueva
Pgina
1191
InputBox(mensaje,titulo)
Ejemplo:
nom = InputBox("Ingrese nombre", "Artefacto")
En este casos e mostrar un mensaje y lo que se ingrese se guardara en la variable nom si se hace
clic en Cancelar en nom se guardar NULL
OpenFileDialog
Es un control que muestra una ventana donde se podr seleccionar un archivo.
ColorDialog
Es un control que muestra la caja de dialogo para seleccionar el color
FontDialog
Es un control que muestra la caja de dialogo para seleccionar el tipo de fuente de una letra
Ejemplo :
Cuando se haga click en el botn Abrir se debe de seleccionar una imagen BMP y ponerla en el
picturebox, el botn pintar deber de seleccionar un color y un tipo de fuente para el label que dice
"hola que tal, por ultimo el botn escuchar permitir seleccionar un archivo mp3 y reproducirlo en
el Windows media player.
Lo primero que debemos de hacer es agregar los controles
Ing. Alberto Moreno Cueva
Pgina
1192
Cuando agregamos esos controles no se muestran en el formulario, debemos de poner un
nombre adecuado a cada control (openfiledialog op, ColorDialog co, fontDialog-fo)
Boton Abrir
'Para que solo se pueda abrir estos tipos de archivos
Op.Filter = "Archivos JPG|*.jpg|Archivos BMP|*.bmp"
Op.FilterIndex = 2 'seleccionamos por defecto el filtro 2 que seria BMP (si fuera 1 seria JPG)
If Op.ShowDialog = DialogResult.OK Then 'Si seleccionamos un archivo
Me.PictureBox1.Image = Image.FromFile(Op.FileName) 'op.Filename recupera el nombre
(con toda su ruta) del archivo seleccionado
End If
Boton Abrir
Ing. Alberto Moreno Cueva
Pgina
1193
If Co.ShowDialog = DialogResult.OK Then 'si seleccionamo ok al momento de abrir la ventana de
color
Label1.ForeColor = Co.Color 'le ponemos el color seleccionado
End If
If Fo.ShowDialog = DialogResult.OK Then
Label1.Font = Fo.Font
End If
Ojo: aqui se mostraran dos ventanas , primero la del color y luego la del tipo de fuente.
Boton Escuchar
Op.Filter = "Archivos MP3|*.mp3|Archivos MPG|*.mpg"
Op.FilterIndex = 1
If Op.ShowDialog = DialogResult.OK Then
win.URL = Op.FileName
End If
Ing. Alberto Moreno Cueva
Pgina
1194
Semana 6 : Uso de Controles
Cuadros de dialogo
Casi todas las aplicaciones necesitan preguntar a los usuarios para abrir o grabar un archivo. Usted puede
construir su propio form para permitrselo, pero esta posibilidad ya est directamente disponible en
Windows, accesible desde un simple control Common Dialog de VB5/6 o a travs de controles
especializados de Visual Studio.Net. Lo mejor de estos controles standard es que los usuarios ya saben
cmo usarlos porque son los mismos que se usan en Word, Excel y la gran mayora de las aplicaciones.
Los cuadros de dialogos estan disponibles en el Framework .NET. Exploraremos los cuadros de dialogo
FontDialog, ColorDialog, SaveFileDialog, OpenFileDialog, PrintDialog, PrintDocumet, PageSetupDialog y
MainMenu.
Control FontDialog (Clase)
FontDialog => Representa un cuadro de dialogo comun que muestra una lista con las fuentes que
normalmente se instalan en el sistema. Se debe de invocar al miembro heredado ShowDalog para crear
este cuadro de dialogo comun especifico.
Control ColorDialog (Clase)
ColorDialog => Representa un cuadro de dialogo comun que muestra los colores disponibles, asi como los
controles que permiten a los usuarios definir colores personalizados.
Control SaveDialog (Clase)
SaveFileDialog => Representa un cuadro de dialogo comun que permite al usuario especificar las
opciones para guardar un archivo. Esta clase no puede heredarse. Esta clase permite abrir y sobrescribir
un archivo existente o crear un archivo nuevo.
Control OpenFileDialog (Clase)
OpenFileDialog => Representa un cuadro de dialogo comun que muestra el control que permite al usuario
abrir un archivo. Esta clase no puede heredarse. Esta clase permite comprobar si existe un archivo y
abrirlo. La propiedad ShowReadOnly determina si aparece una casilla de verificacin de solo lectura en el
cuadro de dialogo.La propiedad ReadOnlyChecked indica la casilla de verificacin de solo lectura esta
activada.
La mayor parte de la funcionalidad de esta clase se encuentra en la clase FileDialog.
Control PrintDialog (Clase)
PrintDialog => Permite a los usuarios seleccionar una impresora y elegir que partes del documento se
deben imprimir.
Ing. Alberto Moreno Cueva
Pgina
1195
Cuando se crea una instancia de PrintDialog, se establecen las propiedades de lectura y escritura en sus
valores iniciales.
Control PrintDocument (Clase)
PrintDocument => Define un objeto reutilizable que envia el resultado a una impresora. Normalmente se
crea una nueva instancia de la clase PrintDocument, se establecen las propiedades que describen como
imprimir y se llama al metodo Print para iniciar el proceso de impresin. Para especificar el resultado que se
va a imprimir, hay que controlar el evento PrintPage y utilizar Graphics que se incluyen en
PrintPageEventArgs.
Control PageSetupDialog (Clase)
PageSetupDialog => Representa un cuadro de dialogo que permite a los usuarios manipular la
configuracin de pagina, incluidos los margenes y la orientacin del papel.
El cuadro de dilogo PageSetupDialog modifica la informacin de PageSettings y PrinterSettings para un
determinado Document. El usuario puede habilitar secciones del cuadro de dilogo para manipular la
configuracin de la impresora, los mrgenes, la orientacin, el tamao y el origen del papel, as como para
mostrar los botones de ayuda y de red. MinMargins define los mrgenes mnimos que puede seleccionar un
usuario.
Cuando se crea una instancia de PageSetupDialog, se establecen las propiedades de lectura y escritura
en sus valores iniciales. Para obtener una lista de esos valores, vea el constructor PageSetupDialog.
Control RichTextBox => Representa un control Rcihtextbox de Windows.
El control RichTextBox permite al usuario escribir y modificar texto, al tiempo que proporciona
caractersticas de formato ms avanzadas que el control TextBox estndar. El texto se puede asignar
directamente al control o se puede cargar desde un archivo de formato de texto enriquecido (RTF) o de
texto sin formato. Al texto del control se le puede asignar formato de carcter y prrafo.
EDITOR DE TEXTO (WORDPAD)
Ing. Alberto Moreno Cueva
Pgina
1196
MENU ARCHIVO
MENU EDICION
MENU FORMATO
Configuracin del Men Archivo:
Archivo
Propiedad:
Name = MenuItem1
Nuevo
Name = MnuNuevo
Abrir
Name = MnuAbrir
Guardar
Name = MnuGuarda
Configurar Pgina
Name = MnuConfigurarPagina
I mprimir
Name = MnuImprimir
Salir
Name = MnuSalir
Configuracin del Men Edicion:
Edicion
Propiedad:
Name = MenuI tem8
Deshacer
Name = MnuDeshacer
Rehacer
Name = MnuRehacer
Copiar
Name = MnuCopiar
Cortar
Name = MnuCortar
Pegar
Name = MnuPegar
Seleccionar Todo
Name = MnuSelTodo
Configuracin del Men Formato:
Formato
Propiedad:
Name = MenuI tem16
Fuente
Name = MnuFuente
Ing. Alberto Moreno Cueva
Pgina
1197
CODIGO FUENTE
Option Strict On
Imports System.io
Imports System.Drawing.Printing
Public Class Form1
Private FuenteImpresion As Font
Private mStoredPageSettings As System.Drawing.Printing.PageSettings
Dim fName As String
Dim streamParaImprimir As StreamReader
Private Sub MnuNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuNuevo.Click
If DeshacerCambios() Then Me.RichTextBox1.Clear()
End Sub
Function DeshacerCambios() As Boolean
If Me.RichTextBox1.Modified Then
Dim replicar As MsgBoxResult
replicar = MsgBox("Los cambios no se han guardado.Deshacer cambios?",
MsgBoxStyle.YesNo)
If replicar = MsgBoxResult.No Then
Return False
Else
Return True
End If
Ing. Alberto Moreno Cueva
Pgina
1198
Else
Return True
End If
End Function
Private Sub MnuAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuAbrir.Click
If DeshacerCambios() Then
OpenFileDialog1.Title = "Seleccione el archivo para Abrir"
OpenFileDialog1.Filter = "Text file|*.txt|Rich text file|*.rtf"
OpenFileDialog1.InitialDirectory = "c:\temp"
If OpenFileDialog1.ShowDialog = DialogResult.OK Then
If OpenFileDialog1.FileName <> "" Then
fName = OpenFileDialog1.FileName
Select Case OpenFileDialog1.FilterIndex
Case 1
RichTextBox1.LoadFile(fName, RichTextBoxStreamType.PlainText)
Case 2
RichTextBox1.LoadFile(fName, RichTextBoxStreamType.RichText)
End Select
End If
End If
lblruta.Text = fName
End If
End Sub
Private Sub MnuGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuGuardar.Click
Ing. Alberto Moreno Cueva
Pgina
1199
SaveFileDialog1.Title = "Guarde su archivo"
SaveFileDialog1.Filter = "Text file (*.txt)|*.txt|Rich text file (*.rtf)|*.rtf"
SaveFileDialog1.InitialDirectory = "c:\temp"
If SaveFileDialog1.ShowDialog = DialogResult.OK Then
If SaveFileDialog1.FileName <> "" Then
Select Case SaveFileDialog1.FilterIndex
Case 1
RichTextBox1.SaveFile(SaveFileDialog1.FileName, _
RichTextBoxStreamType.PlainText)
Case 2
RichTextBox1.SaveFile(SaveFileDialog1.FileName, _
RichTextBoxStreamType.RichText)
End Select
End If
End If
End Sub
Private Sub MnuConfigurarPagina_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuConfigurarPagina.Click
Try
If mStoredPageSettings Is Nothing Then
mStoredPageSettings = New System.Drawing.Printing.PageSettings
End If
PageSetupDialog1.PageSettings = mStoredPageSettings
PageSetupDialog1.ShowDialog()
Catch ex As Exception
MessageBox.Show("Un error a ocurrido - " + ex.Message)
Ing. Alberto Moreno Cueva
Pgina
1200
End Try
End Sub
Private Sub MnuImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuImprimir.Click
Try
streamParaImprimir = New StreamReader(fName)
Try
FuenteImpresion = New Font("Tahoma", 10)
AddHandler PrintDocument1.PrintPage, AddressOf pd_ImpresionporPagina
PrintDocument1.DocumentName = fName
PrintDialog1.Document = PrintDocument1
If PrintDialog1.ShowDialog() = DialogResult.Cancel Then
MessageBox.Show("Cancelando la Impresion", "Impresion del Documento")
Else
PrintDocument1.Print()
End If
Finally
streamParaImprimir.Close()
End Try
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub pd_ImpresionporPagina(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
Dim lineasporPaginas As Single = 0
Dim yPos As Single = 0
Ing. Alberto Moreno Cueva
Pgina
1201
Dim contador As Integer = 0
Dim MargenIzquierdo As Single = ev.MarginBounds.Left
Dim MargenSuperior As Single = ev.MarginBounds.Top
Dim linea As String = Nothing
'Calcular el numero de lineas por pagina.
lineasporPaginas = ev.MarginBounds.Height / FuenteImpresion.GetHeight(ev.Graphics)
'Imprime cada linea del archivo.
While contador < lineasporPaginas
linea = streamParaImprimir.ReadLine()
If linea Is Nothing Then
Exit While
End If
yPos = MargenSuperior + contador * FuenteImpresion.GetHeight(ev.Graphics)
ev.Graphics.DrawString(linea, FuenteImpresion, Brushes.Black, MargenIzquierdo, yPos,
New StringFormat)
contador += 1
End While
'si hay mas lineas existente, imprime otra pagina.
If Not (linea Is Nothing) Then
ev.HasMorePages = True
Else
ev.HasMorePages = False
End If
End Sub
Private Sub MnuSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuSalir.Click
End
Ing. Alberto Moreno Cueva
Pgina
1202
End Sub
Private Sub MnuDeshacer_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MnuDeshacer.Click
If Me.RichTextBox1.CanUndo Then Me.RichTextBox1.Undo()
End Sub
Private Sub MnuRehacer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuRehacer.Click
If Me.RichTextBox1.CanRedo Then Me.RichTextBox1.Redo()
End Sub
Private Sub MnuCopiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuCopiar.Click
Me.RichTextBox1.Copy()
End Sub
Private Sub MnuCortar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuCortar.Click
Me.RichTextBox1.Cut()
End Sub
Private Sub MnuPegar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuPegar.Click
Try
Me.RichTextBox1.Paste()
Catch exc As Exception
MsgBox("No se puede pegar el contenido actual en el portapapeles")
End Try
End Sub
Private Sub MnuSelTodo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuSelTodo.Click
Ing. Alberto Moreno Cueva
Pgina
1203
Me.RichTextBox1.SelectAll()
End Sub
Private Sub MnuFuente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuFuente.Click
If Not Me.RichTextBox1.SelectionFont Is Nothing Then
FontDialog1.Font = Me.RichTextBox1.SelectionFont
Else
Me.FontDialog1.Font = Nothing
End If
FontDialog1.ShowApply = True
If FontDialog1.ShowDialog = DialogResult.OK Then
Me.RichTextBox1.SelectionFont = Me.FontDialog1.Font
End If
End Sub
Private Sub MnuColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MnuColor.Click
ColorDialog1.Color = Me.RichTextBox1.ForeColor
ColorDialog1.ShowDialog()
Me.RichTextBox1.SelectionColor = ColorDialog1.Color
ColorDialog1.Dispose()
ColorDialog1 = Nothing
End Sub
End Class
Resultado:
Ing. Alberto Moreno Cueva
Pgina
1204
Control FolderBrowserDialog (Clase)
Pide al usuario que seleccione una carpeta. Esta clase no se puede heredar.
Esta clase proporciona un modo de preguntar al usuario si desea examinar, crear y,
posteriormente, seleccionar una carpeta. Utilice esta clase si slo desea que el usuario seleccione
carpetas, pero no archivos. Las carpetas se examinan mediante un control de rbol. Slo se
pueden seleccionar las carpetas del sistema de archivos, las carpetas virtuales no.
Normalmente, despus de crear un FolderBrowserDialog nuevo, RootFolder se establece en la
ubicacin desde donde se va a comenzar a examinar. SelectedPath puede establecerse tambin
en una ruta de acceso absoluta a una subcarpeta de RootFolder que se seleccionar
inicialmente. Otra posibilidad es establecer la propiedad Description para proporcionar
instrucciones adicionales al usuario. Por ltimo, se llama al mtodo ShowDialog para que muestre
el cuadro de dilogo al usuario. Si se cierra el cuadro de dilogo y el resultado de ShowDialog es
DialogResult.OK, SelectedPath ser una cadena que contenga la ruta de acceso a la carpeta
seleccionada.
Es posible utilizar la propiedad ShowNewFolderButton para controlar si el usuario tiene permiso
para crear carpetas nuevas con el botn Nueva carpeta.
FolderBrowserDialog es un cuadro de dilogo modal, por lo tanto, cuando se muestra, bloquea el
resto de la aplicacin hasta que el usuario elige una carpeta. Cuando un cuadro de dilogo se
muestra en
Ing. Alberto Moreno Cueva
Pgina
1205
forma modal, no puede producirse ninguna entrada de datos (mediante teclado o haciendo clic con
el mouse), a excepcin de los objetos del cuadro de dilogo. El programa debe ocultar o cerrar el
cuadro de dilogo (normalmente, como respuesta a alguna accin del usuario) antes de que
pueda producirse una entrada de datos en el programa de llamada.
Ejemplo 19
El ejemplo de cdigo siguiente crea una aplicacin que le permite al usuario abrir los archivos de
texto enriquecido (.rtf) dentro del control RichTextBox.
' The following example displays an application that provides the ability to
' open rich text files (rtf) into the RichTextBox. The example demonstrates
' using the FolderBrowserDialog to set the default directory for opening files.
' The OpenFileDialog class is used to open the file.
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.IO
Public Class FolderBrowserDialogExampleForm
Inherits Form
Private folderBrowserDialog1 As FolderBrowserDialog
Private openFileDialog1 As OpenFileDialog
Private richTextBox1 As RichTextBox
Private mainMenu1 As MainMenu
Private fileMenuItem As MenuItem
Private WithEvents folderMenuItem As MenuItem, _
closeMenuItem As MenuItem, _
openMenuItem As MenuItem
Private openFileName As String, folderName As String
Private fileOpened As Boolean = False
Public Sub New()
Me.mainMenu1 = New System.Windows.Forms.MainMenu()
Ing. Alberto Moreno Cueva
Pgina
1206
Me.fileMenuItem = New System.Windows.Forms.MenuItem()
Me.openMenuItem = New System.Windows.Forms.MenuItem()
Me.folderMenuItem = New System.Windows.Forms.MenuItem()
Me.closeMenuItem = New System.Windows.Forms.MenuItem()
Me.openFileDialog1 = New System.Windows.Forms.OpenFileDialog()
Me.folderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog()
Me.richTextBox1 = New System.Windows.Forms.RichTextBox()
Me.mainMenu1.MenuItems.Add(Me.fileMenuItem)
Me.fileMenuItem.MenuItems.AddRange( _
New System.Windows.Forms.MenuItem() {Me.openMenuItem, _
Me.closeMenuItem, _
Me.folderMenuItem})
Me.fileMenuItem.Text = "File" : Me.openMenuItem.Text = "Open..."
Me.folderMenuItem.Text = "Select Directory..." : Me.closeMenuItem.Text = "Close"
Me.closeMenuItem.Enabled = False : Me.openFileDialog1.DefaultExt = "rtf"
Me.openFileDialog1.Filter = "rtf files (*.rtf)|*.rtf"
' Set the Help text description for the FolderBrowserDialog.
Me.folderBrowserDialog1.Description = _
"Select the directory that you want to use As the default."
' Do not allow the user to create New files via the FolderBrowserDialog.
Me.folderBrowserDialog1.ShowNewFolderButton = False
' Default to the My Documents folder.
Me.folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Personal
Me.richTextBox1.AcceptsTab = True
Me.richTextBox1.Location = New System.Drawing.Point(8, 8)
Me.richTextBox1.Size = New System.Drawing.Size(280, 344)
Me.richTextBox1.Anchor = AnchorStyles.Top Or AnchorStyles.Left Or _
AnchorStyles.Bottom Or AnchorStyles.Right
Me.ClientSize = New System.Drawing.Size(296, 360)
Me.Controls.Add(Me.richTextBox1) : Me.Menu = Me.mainMenu1
Me.Text = "RTF Document Browser"
End Sub
Ing. Alberto Moreno Cueva
Pgina
1207
<STAThread()> _
Shared Sub Main()
Application.Run(New FolderBrowserDialogExampleForm())
End Sub
' Bring up a dialog to open a file.
Private Sub openMenuItem_Click(sender As object, e As System.EventArgs) _
Handles openMenuItem.Click
' If a file is not opened, then set the initial directory to the
' FolderBrowserDialog.SelectedPath value.
If (not fileOpened) Then
openFileDialog1.InitialDirectory = folderBrowserDialog1.SelectedPath
openFileDialog1.FileName = nothing
End If
' Display the openFile dialog.
Dim result As DialogResult = openFileDialog1.ShowDialog()
' OK button was pressed.
If (result = DialogResult.OK) Then
openFileName = openFileDialog1.FileName
Try
' Output the requested file in richTextBox1.
Dim s As Stream = openFileDialog1.OpenFile()
richTextBox1.LoadFile(s, RichTextBoxStreamType.RichText)
s.Close()
fileOpened = True
Catch exp As Exception
MessageBox.Show("An error occurred while attempting to load the file. The error is:" _
+ System.Environment.NewLine + exp.ToString() +
System.Environment.NewLine)
fileOpened = False
End Try
Invalidate()
closeMenuItem.Enabled = fileOpened
' Cancel button was pressed.
Ing. Alberto Moreno Cueva
Pgina
1208
ElseIf (result = DialogResult.Cancel) Then
return
End If
End Sub
' Close the current file.
Private Sub closeMenuItem_Click(sender As object, e As System.EventArgs) _
Handles closeMenuItem.Click
richTextBox1.Text = ""
fileOpened = False
closeMenuItem.Enabled = False
End Sub
' Bring up a dialog to chose a folder path in which to open or save a file.
Private Sub folderMenuItem_Click(sender As object, e As System.EventArgs) _
Handles folderMenuItem.Click
' Show the FolderBrowserDialog.
Dim result As DialogResult = folderBrowserDialog1.ShowDialog()
If ( result = DialogResult.OK ) Then
folderName = folderBrowserDialog1.SelectedPath
If (not fileOpened) Then
' No file is opened, bring up openFileDialog in selected path.
openFileDialog1.InitialDirectory = folderName
openFileDialog1.FileName = nothing
openMenuItem.PerformClick()
End If
End If
End Sub
End Class
Explorador de Archivos.
Form1.vb
Propiedades de los controles usados:
Combobox1
Ing. Alberto Moreno Cueva
Pgina
1209
Name = CbUnidades
DropDownStyle = DropDownList
ListBox1
Name = lbCarpetas
Listbox2
Name = lbArchivos
Cdigo Fuente:
Imports System.IO
Public Class Form1
' Al abrirse el formulario
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim Unidad As String ' para recorrer las unidades
' Aadimos cada una de las unidades lgicas
For Each Unidad In Directory.GetLogicalDrives
cbUnidades.Items.Add(Unidad) ' a la lista combinada
If Unidad = "C:\" Then ' cuando encontremos la unidad C:\
' la establecemos como seleccionada por defecto
cbUnidades.SelectedIndex = cbUnidades.Items.Count - 1
End If
Next
End Sub
' Al seleccionarse una unidad
Private Sub cbUnidades_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cbUnidades.SelectedIndexChanged
Ing. Alberto Moreno Cueva
Pgina
1210
Dim Carpeta As String ' para recorrer las carpetas
lbCarpetas.Items.Clear() ' eliminamos la lista actual de carpetas
' por cada carpeta existente
For Each Carpeta In Directory.GetDirectories(cbUnidades.Text)
lbCarpetas.Items.Add(Path.GetFileName(Carpeta)) ' aadimos un elemento a la lista
Next
lbCarpetas.SelectedIndex = 0 ' seleccionamos la primera carpeta
End Sub
' Al seleccionarse una carpeta
Private Sub lbCarpetas_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles lbCarpetas.SelectedIndexChanged
Dim Archivo As String ' para recorrer los archivos
lbArchivos.Items.Clear() ' eliminamos la lista actual
' por cada archivo de texto existente
For Each Archivo In Directory.GetFiles(cbUnidades.Text & lbCarpetas.Text, "*.txt")
lbArchivos.Items.Add(Path.GetFileName(Archivo)) ' aadimos un elemento a la lista
Next
If lbArchivos.Items.Count <> 0 Then ' si al menos un archivo
lbArchivos.SelectedIndex = 0 ' lo seleccionamos
Else
tbContenido.Text = "" ' eliminamos el contenido anterior
End If
End Sub
' Al seleccionarse un archivo
Private Sub lbArchivos_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles lbArchivos.SelectedIndexChanged
Ing. Alberto Moreno Cueva
Pgina
1211
' Componemos el nombre del archivo
Dim NombreArchivo As String = _
cbUnidades.Text & lbCarpetas.Text & _
Path.DirectorySeparatorChar & _
lbArchivos.Text
' y lo abrimos para lectura
Dim SRArchivo As StreamReader = File.OpenText(NombreArchivo)
' lo leemos completo asignando el contenido al TextBox
tbContenido.Text = SRArchivo.ReadToEnd
SRArchivo.Close() ' y finalmente lo cerramos
End Sub
' Al pulsar el botn Guardar
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
' Componemos el nombre del archivo
Dim NombreArchivo As String = _
cbUnidades.Text & lbCarpetas.Text & _
Path.DirectorySeparatorChar & _
lbArchivos.Text
' y lo creamos nuevo
Dim SRArchivo As StreamWriter = File.CreateText(NombreArchivo)
' escribimos el contenido en el archivo
SRArchivo.Write(tbContenido.Text)
SRArchivo.Close() ' y finalmente lo cerramos
End Sub
End Class
Ing. Alberto Moreno Cueva
Pgina
1212
Semana 7 : Uso de dmi
Las aplicaciones MDI (interfaz de mltiples documentos) permiten mostrar varios
documentos al mismo tiempo, cada uno de ellos en su propia ventana. Las aplicaciones
MDI suelen tener un elemento de men Ventana con submens que permiten cambiar entre
ventanas o documentos.
Simple cdigo fuente de muestra en visual basic.net que usa un formulario MDI para abrir y crear
archivos de texto
El mismo consta de un form Mdi principal que tiene la opcin para crear un nuevo formulario Mdi
Child, creando una nueva instancia ( en este caso de formulario frmDoc).
Este form tiene un Richtextbox donde se puede cargar o crear un archivo de texto. Para leer el
documento se usa el mtodo Loadfile y para guardarlo con saveFile
En el procedimiento siguiente, crear formularios MDI secundarios que muestran un control
RichTextBox, similar a la mayora de aplicaciones de procesamiento de textos. Si sustituye el
control System.Windows.Forms por otros controles, tales como el control DataGridView o una
mezcla de controles, podr crear ventanas secundarias MDI (y, por extensin, aplicaciones MDI)
con diversas posibilidades.
Nota
Los cuadros de dilogo y comandos de men que se ven pueden diferir de los descritos en la
Ayuda, en funcin de la configuracin activa o la edicin. Para cambiar la configuracin, elija la
opcin Importar y exportar configuraciones en el men Herramientas.
Ing. Alberto Moreno Cueva
Pgina
1213
Para crear formularios MDI secundarios
1. Cree un formulario primario MDI con una estructura de mens que contenga los elementos
de men Archivo y Ventana de nivel superior y los elementos de men Nuevo y Cerrar.
2. En la lista desplegable que se encuentra en la parte superior de la ventana Propiedades,
seleccione el elemento de men correspondiente al elemento Ventana y establezca el valor
de la propiedad MdiList en true.
Esto habilitar al men Ventana para que mantenga una lista de ventanas secundarias MDI
abiertas, con una marca de verificacin junto a la ventana secundaria activa.
3. En el Explorador de soluciones, haga clic con el botn secundario en el proyecto, haga
clic en Agregar y seleccione Agregar nuevo elemento.
Este formulario ser la plantilla de los formularios MDI secundarios.
Nota
El formulario secundario MDI que crear en este paso es un formulario Windows Forms
estndar. Por tanto, tendr una propiedad Opacity, que permite controlar la transparencia del
formulario. Sin embargo, la propiedad Opacity est diseada para ventanas de alto nivel. No la
utilice con formularios MDI secundarios, porque pueden surgir problemas.
4. En el cuadro de dilogo Agregar nuevo elemento, seleccione Formulario Windows
Forms (en Visual Basic o Visual C#) o Aplicacin de Windows Forms (.NET) (en Visual
C++) desde el panel Plantillas. En el cuadro Nombre, asigne al formulario el nombre
Form2. Haga clic en el botn Abrir para agregar el formulario al proyecto.
Se abrir el Diseador de Windows Forms, que mostrar el formulario Form2.
5. En el Cuadro de herramientas, arrastre un control RichTextBox al formulario.
6. En la ventana Propiedades, establezca la propiedad Anchor en Top, Left y la propiedad
Dock en Fill.
Esto hace que el control RichTextBox llene por completo el rea del formulario MDI
secundario, aunque se cambie el tamao del formulario.
7. Cree un controlador de eventos Click para el elemento de men Nuevo. Para obtener
informaci
Ing. Alberto Moreno Cueva
Pgina
1214
n sobre cmo crear controladores de eventos.
8. Inserte el cdigo siguiente para crear un nuevo formulario MDI secundario cuando el
usuario haga clic en el elemento de men Nuevo.
Nota
En el ejemplo siguiente, el controlador de eventos controla el evento Click para MenuItem2.
Tenga presente que, en funcin de las caractersticas especficas de la arquitectura de la
aplicacin, podra ser que el elemento de men Nuevo no fuese MenuItem2.
9. Visual Basic
10. Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MenuItem2.Click
11. Dim NewMDIChild As New Form2()
12. 'Set the Parent Form of the Child window.
13. NewMDIChild.MdiParent = Me
14. 'Display the new form.
15. NewMDIChild.Show()
16. End Sub
Ing. Alberto Moreno Cueva
Pgina
1215
Semana 8 : Creacion de Controles
Componentes en .Net
Cuando se crea un control definido por el usuario (User Controls), la ventaja es el siguiente:
Contienen sus propias variables, as como la definicin de los mtodos y propiedades de
los controles incluidos en el User Control.
Estos controles pueden ser utilizados ms de una vez sin causar conflictos a las
propiedades y mtodos.
Para crear un User Control, debemos definir el proyecto por medio del icono: Biblioteca de
Controles (Type Control Library), a partir de all se puede insertar sobre este componente
los controles as como definir propiedades y eventos a dicho control.
Ejercicios Diversos
Crear una carpeta cuyo nombre es: Componentes en la unidad C:
Ejemplo 01 (Crear un componente que liste la tabla de multiplicar)
1. Activar el Visual Studio .net
Clic en: Biblioteca de
Nombre del
Seleccionar la carpeta:
Clic en:
Ing. Alberto Moreno Cueva
Pgina
1216
2. En el rea de trabajo del UserControl:
Nombre del
Nombre de la clase (User
Doble clic y modificamos el UserControl
Nombre: lsttabla
Font / Bold= True
Listbox
Insertado en el
UserControl
Ing. Alberto Moreno Cueva
Pgina
1217
Codificando en el UserControl
Inherits System.Windows.Forms.UserControl
Private xnumero As Single (Variable que almacena el numero)
Public Property mnumero() As Single
Get
End Get
Set(ByVal Value As Single) (Analizando al Value)
If Value = 0 Then (Si value=0)
lsttabla.Items.Clear() (Se limpia el listbox)
Return (Se Cancela el conjunto de instrucciones)
Else (En caso Contrario)
lsttabla.Items.Clear() (Se Limpia el listbox)
xnumero = Value (Se almacena el valor de value a la variable xmumero)
Call listatabla() (Se invoca al procedimiento listatabla)
End If
End Set
End Property
Creando al procedimiento listatabla
Private Sub listatabla()
Dim n As Single (Variable n para el For)
For n = 1 To 12
lsttabla.Items.Add(xnumero & " * " & n & " = " & xnumero * n)
Next
End Sub
Ing. Alberto Moreno Cueva
Pgina
1218
3. Luego grabar por segunda o ensima vez al proyecto
4. Clic en el men: Generar
5. Se Visualiza la siguiente ventana:
6. Activar el .net por segunda vez
7. Seleccionar lo siguiente:
Clic en: Generar Solucin
Clic en: Aplicacin para
Nombre del Archivo:
Ing. Alberto Moreno Cueva
Pgina
1219
8. Nombre del Formulario: Frmtabla
9. Text: Tabla de Multiplicar
10. Nombre del Archivo: Tabla01 (Explorador de Soluciones)
11. Diseo del Formulario
12. Insertamos el control en el cuadro de herramientas
13. Ubicarse en el cuadro de herramientas, pulsar clic derecho
14. Se visualiza lo siguiente:
Name:
Name: btnsalir
Clic en la opcin:
Ing. Alberto Moreno Cueva
Pgina
1220
15. Se visualiza lo siguiente:
Clic en el botn:
Seleccionar la carpeta:
Clic en el archivo:
ComponentesTablaMultiplicar.dll
Ing. Alberto Moreno Cueva
Pgina
1221
16. Se visualiza lo siguiente:
17. En el cuadro de herramientas, se visualiza lo siguiente:
18. Codificando en el formulario
Clic en el botn:
Componente Insertado en las
opciones de lista
Clic en Aceptar
Compone
Ing. Alberto Moreno Cueva
Pgina
1222
Variable tablita de tipo componente
Private tablita As New ComponentesTablaMultiplicar.tabla01
Private num As Single (Variable num que almacena el numero)
Creando al handle hnd_numero para el cuadro de texto: txtnumero, evento :KeyPress
Private Sub hnd_numero(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtnumero.KeyPress
If Asc(e.KeyChar) = 13 Then (Si se pulsa enter)
num = Val(txtnumero.Text) (Se almacena en la variable num)
tablita.mnumero = num (el valor de num se almacena en la propiedad mnumero)
tablita.Top = 35 (el top de tablita es 35)
tablita.Left = 35 (el left de tablita es 35)
Me.Controls.Add(tablita) (se Agrega hacia el formulario)
End If
End Sub
Creando al handle hnd_limpia para el cuadro de texto: txtnumero, evento : TextChanged
Private Sub hnd_limpa(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txtnumero.TextChanged
If Len(txtnumero.Text) = 0 Then (Si la longitud de txtnumero es igual a 0)
num = Val(txtnumero.Text) (El valor 0 lo almacenamos en num)
tablita.mnumero = num (Luego el valor de num que es 0 lo almacenamos en mnumero)
End If
End Sub
Creando al handle hnd_salir para el botn. Btnsalir, evento: Click
Private Sub hnd_salir(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnsalir.Click
End
End Sub
Ing. Alberto Moreno Cueva
Pgina
1223
19. Grabar y ejecutar la aplicacin
Ejemplo02 (Crear un componente que nos permita almacenar notas y calcule su promedio y
su observacin)
1. Crear una carpeta cuyo nombre es: Componentes02 en la unidad C:
2. Activar el Visual Studio .net
3. Seleccionar el siguiente icono: Seleccionar: Biblioteca de controles de
Nombre del Proyecto:
Carpeta: C:\ Componentes02
Clic en:
Ing. Alberto Moreno Cueva
Pgina
1224
4. En el explorador de soluciones, cambiar el archivo fsico por lo siguiente:
5. Seleccionar el rea de trabajo del usercontrol, Name: frmcontrolnotas
6. Diseo en el Usercontrol
ControlNotas.v
Usercontrol
GroupBox
Name:
Name:
Name: Name:
Name: txtpromedio
Name: txtobservacion
Name: txtnota4
Ing. Alberto Moreno Cueva
Pgina
1225
7. Codificando en la clase:
Public Class frmcontrolnotas
Inherits System.Windows.Forms.UserControl
Private n1, n2, n3, n4, promedio As Single (Variable para las notas y promedios)
Private obs As String (Variable para la observacin)
Propiedad mn1 que almacena la nota1
Public Property mn1() As Single
Get
End Get
Set(ByVal Value As Single)
If (Value = 0) Or (Value <= -1) Or (Value >= 21) Then
Return
Else
n1 = Value
Call calculo_promedio()
obs = calculo_observa(promedio)
End If
End Set
End Property
Propiedad mn2 que almacena la nota2
Public Property mn2() As Single
Get
End Get
Verifica si el value almacena los
valores: 0,-1,21 si es as se cancela
con return
n1=almacena al value
Se invoca al
procedimiento:
Calculo_promedio
Se invoca a la funcin:
calculo_observa por
medio de la variable obs
Verifica si el value almacena los
valores: 0,-1,21 si es as se cancela
con return
Ing. Alberto Moreno Cueva
Pgina
1226
Set(ByVal Value As Single)
If (Value = 0) Or (Value <= -1) Or (Value >= 21) Then
Return
Else
n2 = Value
Call calculo_promedio()
obs = calculo_observa(promedio)
End If
End Set
End Property
Propiedad mn3 que almacena la nota3
Public Property mn3() As Single
Get
End Get
Set(ByVal Value As Single)
If (Value = 0) Or (Value <= -1) Or (Value >= 21) Then
Return
Else
n3 = Value
Call calculo_promedio()
obs = calculo_observa(promedio)
End If
End Set
End Property
n2=almacena al value
Se invoca al
procedimiento:
Calculo_promedio
Se invoca a la funcin:
calculo_observa por
medio de la variable obs
Verifica si el value almacena los
valores: 0,-1,21 si es as se cancela
con return
n3=almacena al value
Se invoca al
procedimiento:
Calculo_promedio
Se invoca a la funcin:
calculo_observa por
medio de la variable obs
Ing. Alberto Moreno Cueva
Pgina
1227
Propiedad mn4 que almacena la nota4
Public Property mn4() As Single
Get
End Get
Set(ByVal Value As Single)
If (Value = 0) Or (Value <= -1) Or (Value >= 21) Then
Return
Else
n4 = Value
Call calculo_promedio()
obs = calculo_observa(promedio)
End If
End Set
End Property
Creando un sub-procedimiento calculo_promedio (Halla el promedio de las 4 notas)
Private Sub calculo_promedio()
promedio = ((n1 + n2 + n3 + n4) / 4)
txtpromedio.Text = promedio.ToString
End Sub
Creando la function: Calculo_observa, que nos permita hallar la observacin de acuerdo al
promedio
Private Function calculo_observa(ByVal prom As Single) As String
Select Case prom
Case 0 To 4 : calculo_observa = "Bruto"
Case 5 To 10 : calculo_observa = "Malo"
Verifica si el value almacena los
valores: 0,-1,21 si es as se cancela
con return
n4=almacena al value
Se invoca al
procedimiento:
Calculo_promedio
Se invoca a la funcin:
calculo_observa por
Calculando las 4 notas y se almacena en
la variable: promedio
Se visualiza el valor de la variable
promedio en el cuadro de texto:
Parmetro Prom que
almacena el
Se Analiza la variable prom
con el select case
Luego se almacena en el
cuadro de texto:
txtobservacion
Ing. Alberto Moreno Cueva
Pgina
1228
Case 11 To 14 : calculo_observa = "Regular"
Case 15 To 18 : calculo_observa = "Bueno"
Case 19 To 20 : calculo_observa = "Excelente"
Case Else : calculo_observa = ""
End Select
txtobservacion.Text = obs
End Function
Creando una propiedad mpromedio donde se almacena el promedio
Public Property mpromedio() As Single
Get
mpromedio = promedio
End Get
Set(ByVal Value As Single)
End Set
End Property
Creando una propiedad mobserva donde se almacena la observacin (obs Variable)
Public Property mobserva() As String
Get
mobserva = obs
End Get
Set(ByVal Value As String)
End Set
End Property
Almacenando la variable
promedio hacia la propiedad
mpromedio
Almacenando la variable obs
hacia la propiedad mobserva
Ing. Alberto Moreno Cueva
Pgina
1229
Creando una propiedad tmn1 para manipular al cuadro de texto: txtnota1
Public Property tmn1() As String
Get
End Get
Set(ByVal Value As String)
If Value = 0 Then txtnota1.Text = ""
End Set
End Property
Creando una propiedad tmn2 para manipular al cuadro de texto: txtnota2
Public Property tmn2() As String
Get
End Get
Set(ByVal Value As String)
If Value = 0 Then txtnota2.Text = ""
End Set
End Property
Creando una propiedad tmn3 para manipular al cuadro de texto: txtnota3
Public Property tmn3() As String
Get
End Get
Set(ByVal Value As String)
If Value = 0 Then txtnota3.Text = ""
End Set
Si value=0 entonces el valor del
cuadro de texto txtnota1 es
Si value=0 entonces el valor del
cuadro de texto txtnota2 es
Si value=0 entonces el valor del
cuadro de texto txtnota3 es
Ing. Alberto Moreno Cueva
Pgina
1230
End Property
Creando una propiedad tmn4 para manipular al cuadro de texto: txtnota4
Public Property tmn4() As String
Get
End Get
Set(ByVal Value As String)
If Value = 0 Then txtnota4.Text = "" : txtpromedio.Text = "" : txtobservacion.Text = ""
End Set
End Property
Trabajando con los eventos de los cuadro de textos
En el objeto: txtnota1, evento: Keypress
Private Sub txtnota1_KeyPress(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtnota1.KeyPress
If Asc(e.KeyChar) = 13 Then
If Len(txtnota1.Text) = 0 Then
txtnota1.Focus()
Else
If (Integer.Parse(txtnota1.Text) >= 0 And Integer.Parse(txtnota1.Text)) <= 20 Then
mn1 = Val(txtnota1.Text)
txtnota2.Focus()
Else
txtnota1.Text = ""
Si value=0 entonces el valor del cuadro de texto txtnota4,
txtpromedio, txtobservacion estn vacos
Si la longitud de txtnota1 es = 0, entonces
se toma el enfoque de txtnota1
Si el rango es de 0 a 20, entonces se almacena el
valor de txtnota1 en: mn1
Si el rango no es de 0 a 20 entonces se limpia el cuadro
de texto: txtnota1 y se toma el enfoque
Ing. Alberto Moreno Cueva
Pgina
1231
txtnota1.Focus()
End If
End If
End If
End Sub
En el objeto: txtnota2, evento: Keypress
Private Sub txtnota2_KeyPress(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtnota2.KeyPress
If Asc(e.KeyChar) = 13 Then
If Len(txtnota2.Text) = 0 Then
txtnota2.Focus()
Else
If (Integer.Parse(txtnota2.Text) >= 0 And Integer.Parse(txtnota2.Text)) <= 20 Then
mn2 = Val(txtnota2.Text)
txtnota3.Focus()
Else
txtnota2.Text = ""
txtnota2.Focus()
End If
End If
End If
End Sub
En el objeto: txtnota3, evento: Keypress
Private Sub txtnota3_KeyPress(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtnota3.KeyPress
Si la longitud de txtnota2 es = 0, entonces
se toma el enfoque de txtnota2
Si el rango es de 0 a 20, entonces se almacena el
valor de txtnota2 en: mn2
Si el rango no es de 0 a 20 entonces se limpia el cuadro
de texto: txtnota2 y se toma el enfoque
Ing. Alberto Moreno Cueva
Pgina
1232
If Asc(e.KeyChar) = 13 Then
If Len(txtnota3.Text) = 0 Then
txtnota3.Focus()
Else
If (Integer.Parse(txtnota3.Text) >= 0 And Integer.Parse(txtnota3.Text)) <= 20 Then
mn3 = Val(txtnota3.Text)
txtnota4.Focus()
Else
txtnota3.Text = ""
txtnota3.Focus()
End If
End If
End If
End Sub
En el objeto: txtnota4, evento: Keypress
Private Sub txtnota4_KeyPress(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtnota4.KeyPress
If Asc(e.KeyChar) = 13 Then
If Len(txtnota4.Text) = 0 Then
txtnota4.Text = ""
Else
If (Integer.Parse(txtnota4.Text) >= 0 And Integer.Parse(txtnota4.Text)) <= 20 Then
mn4 = Val(txtnota4.Text)
txtobservacion.Focus()
Else
Si la longitud de txtnota3 es = 0, entonces
se toma el enfoque de txtnota3
Si el rango es de 0 a 20, entonces se almacena el
valor de txtnota3 en: mn3
Si el rango no es de 0 a 20 entonces se limpia el cuadro
de texto: txtnota3 y se toma el enfoque
Si la longitud de txtnota4 es = 0, entonces
se toma el enfoque de txtnota4
Si el rango es de 0 a 20, entonces se almacena el
valor de txtnota4 en: mn4
Ing. Alberto Moreno Cueva
Pgina
1233
txtnota4.Text = ""
txtnota4.Focus()
End If
End If
End If
End Sub
En el objeto: txtnota1, evento: TextChanged
Private Sub txtnota1_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles txtnota1.TextChanged
If Not IsNumeric(txtnota1.Text) Then
txtnota1.Text = ""
txtnota1.Focus()
End If
End Sub
En el objeto: txtnota2, evento: TextChanged
Private Sub txtnota2_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles txtnota2.TextChanged
If Not IsNumeric(txtnota2.Text) Then
txtnota2.Text = ""
txtnota2.Focus()
End If
End Sub
En el objeto: txtnota3, evento: TextChanged
Private Sub txtnota3_TextChanged(ByVal sender As System.Object, ByVal e As
System.Event
Args) Handles
Si el rango no es de 0 a 20 entonces se limpia el cuadro
de texto: txtnota4 y se toma el enfoque
Si no se digita un numero en el cuadro de
texto: txtnota1, entonces se limpia el
cuadro y se toma el enfoque
Si no se digita un numero en el cuadro de
texto: txtnota2, entonces se limpia el
cuadro y se toma el enfoque
Ing. Alberto Moreno Cueva
Pgina
1234
txtnota3.TextChanged
If Not IsNumeric(txtnota3.Text) Then
txtnota3.Text = ""
txtnota3.Focus()
End If
End Sub
En el objeto: txtnota4, evento: TextChanged
Private Sub txtnota4_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles txtnota4.TextChanged
If Not IsNumeric(txtnota4.Text) Then
txtnota4.Text = ""
txtnota4.Focus()
End If
End Sub
8. Luego seleccionar la opcin: Generar / Generar Solucin
Si no se digita un numero en el cuadro de
texto: txtnota3, entonces se limpia el
cuadro y se toma el enfoque
Si no se digita un numero en el cuadro de
texto: txtnota4, entonces se limpia el
cuadro y se toma el enfoque
Ing. Alberto Moreno Cueva
Pgina
1235
9. Seleccionar: Generar / Generar Componentes2
10. Activar el Visual Studio .net, por segunda vez
Clic en: Aplicacin Para
Nombre del Proyecto:
Carpeta: C:\ Componentes02
Clic en:
Ing. Alberto Moreno Cueva
Pgina
1236
11. Propiedades del Formulario:
12. Diseo del Formulario
13. Del Cuadro de Herramientas, seleccionar:
14. Se visualiza en la parte inferior de la pantalla:
15. Seleccionar el cuadro de texto: txtcodigo y en el cuadro de propiedades
Name: frmdatos
Text: Ingreso de Datos
StartPosition: Center Screen
Name: gbxdatos / Enabled:
Name:
Name:
Name:
Name:
Name: txtcorreo
Herramienta: Tooltip,
sirve para crear
mensajes emergentes
Digitar el texto: Ingrese Un
Ing. Alberto Moreno Cueva
Pgina
1237
16. Seleccionar el cuadro de texto: txtpaterno y en el cuadro de propiedades
17. Seleccionar el cuadro de texto: txtpaterno y en el cuadro de propiedades
18. Seleccionar el cuadro de texto: txtnombres y en el cuadro de propiedades
19. Seleccionar el cuadro de texto: txtcorreo y en el cuadro de propiedades
20. Codificando en el formulario
Public Class frmdatos
Private xmenu As New MainMenu
Digitar el texto: Ingrese Un Apellido
Digitar el texto: Ingrese Un Apellido Materno
Digitar el texto: Ingrese Un Nombre
Digitar el texto: Ingrese Un
Creando un objeto xmenu
de tipo Men Principal
Ing. Alberto Moreno Cueva
Pgina
1238
Private WithEvents xprincipal, xnuevo, xcancelar, xraya, xsalir As New MenuItem
Private xprom As New Componentes2.frmcontrolnotas
21. En el Objeto: Form, evento Load
Form Load
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
With xprincipal
.Text = "&Opciones Generales"
.Shortcut = Shortcut.CtrlO
.ShowShortcut = True
End With
With xnuevo
.Text = "&Nuevo Registro"
.Shortcut = Shortcut.CtrlN
.ShowShortcut = True
End With
With xcancelar
.Text = "&Cancelar Todo"
.Shortcut = Shortcut.CtrlShiftC
.ShowShortcut = True
End With
Creando las opciones del men con sus eventos
correspondientes
Invocando al control
con el objeto xprom
Creando a la opcin: &Opciones
Generales
Creando a la opcin: &Nuevo Registro
Creando a la opcin: &Cancelar Todo
Ing. Alberto Moreno Cueva
Pgina
1239
With xraya
.Text = "-"
End With
With xsalir
.Text = "&Salir"
.Shortcut = Shortcut.CtrlS
.ShowShortcut = True
End With
With xprincipal.MenuItems
.Add(xnuevo)
.Add(xcancelar)
.Add(xraya)
.Add(xsalir)
End With
xmenu.MenuItems.Add(xprincipal)
Menu = xmenu
End Sub
Creando un handle hnd_nuevo para la opcin: xnuevo, evento: Click
Private Sub hnd_nuevo(ByVal sender As Object, ByVal e As System.EventArgs) Handles
xnuevo.Click
gbxdatos.Enabled = True (Se activa el groupbox)
Dim obj1 As Object (Se declara un objeto obj1)
For Each obj1 In Me.gbxdatos.Controls
If TypeOf obj1 Is TextBox Then
CType(obj1, TextBox).Text = ""
Creando a la opcin: -
Creando a la opcin: &Salir
Agregando las opciones a
xprincipal
Agregando xprincipal a xmenu
Se Limpia los cuadros de
textos
Ing. Alberto Moreno Cueva
Pgina
1240
End If
Next
With xprom (Con el objeto xprom)
.Top = Me.gbxdatos.Height (Se da un valor al top El alto de gbxdatos)
.Left = gbxdatos.Left (Se da un valor al left El left de gbxdatos)
End With
xprom.tmn1 = 0
xprom.tmn2 = 0
xprom.tmn3 = 0
xprom.tmn4 = 0
Me.Controls.Add(xprom) (Se agrega el objeto xprom al formulario)
txtcodigo.Focus() (Se toma el enfoque al objeto: txtcodigo)
End Sub
Creando un handle hnd_cancelar, para la opcin: xcancelar, evento: Click
Private Sub hnd_cancelar(ByVal sender As Object, ByVal e As System.EventArgs) Handles
xcancelar.Click
Dim obj2 As Object (Se crea el objeto obj2)
For Each obj2 In Me.gbxdatos.Controls
If TypeOf obj2 Is TextBox Then
CType(obj2, TextBox).Text = ""
End If
Next
gbxdatos.Enabled = False - (El groupbox se desactiva)
Me.Controls.Remove(xprom) - (Se elimina el objeto xprom que esta en el Formulario)
End Sub
Creando el handle hnd_salir, para la opcin xsalir, evento: Click
Se dan valores de 0 a la propiedades,
para que los cuadros de textos se
Se Limpia los cuadros de textos
Ing. Alberto Moreno Cueva
Pgina
1241
Private Sub hnd_salir(ByVal sender As Object, ByVal e As System.EventArgs) Handles
xsalir.Click
End
End Sub
Manipulando los eventos de los cuadros de textos
Txtcodigo KeyPress
Private Sub txtcodigo_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtcodigo.KeyPress
If Asc(e.KeyChar) = 13 Then
If Len(txtcodigo.Text) = 0 Then
MessageBox.Show("Ingrese Un Codigo", "Pulse Clic En Aceptar")
txtcodigo.Focus()
Else
txtpaterno.Focus()
End If
End If
End Sub
Txtpaterno KeyPress
Private Sub txtpaterno_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtpaterno.KeyPress
If Asc(e.KeyChar) = 13 Then
If Len(txtpaterno.Text) = 0 Then
MessageBox.Show("Ingrese Un Apellido Paterno", "Pulse Clic En Aceptar")
txtpaterno.Focus()
Else
txtmaterno.Focus()
End If
Ing. Alberto Moreno Cueva
Pgina
1242
End If
End Sub
Txtpaterno TextChanged
Private Sub txtpaterno_TextChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles txtpaterno.TextChanged
If IsNumeric(txtpaterno.Text) Then
txtpaterno.Text = ""
txtpaterno.Focus()
End If
End Sub
Txtmaterno KeyPress
Private Sub txtmaterno_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtmaterno.KeyPress
If Asc(e.KeyChar) = 13 Then
If Len(txtmaterno.Text) = 0 Then
MessageBox.Show("Ingrese Un Apellido Materno", "Pulse Clic En Aceptar")
txtmaterno.Focus()
Else
txtnombres.Focus()
End If
End If
End Sub
Txtmaterno TextChanged
Private Sub
txtmaterno_Te
Ing. Alberto Moreno Cueva
Pgina
1243
xtChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles
txtmaterno.TextChanged
If IsNumeric(txtmaterno.Text) Then
txtmaterno.Text = ""
txtmaterno.Focus()
End If
End Sub
Txtnombres KeyPress
Private Sub txtnombres_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtnombres.KeyPress
If Asc(e.KeyChar) = 13 Then
If Len(txtnombres.Text) = 0 Then
MessageBox.Show("Ingrese Un Nombre", "Pulse Clic En Aceptar")
txtnombres.Focus()
Else
txtcorreo.Focus()
End If
End If
End Sub
Txtnombres TextChanged
Private Sub txtnombres_TextChanged(ByVal sender As Object, ByVal e As
System.EventArgs) Handles txtnombres.TextChanged
If IsNumeric(txtnombres.Text) Then
txtnombres.Text = ""
End If
End Sub
Txtcorreo
Ing. Alberto Moreno Cueva
Pgina
1244
KeyPress
Private Sub txtcorreo_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles txtcorreo.KeyPress
If Asc(e.KeyChar) = 13 Then
If Len(txtcorreo.Text) = 0 Then
MessageBox.Show("Ingrese Un Correo Electrnico", "Pulse Clic En Aceptar")
txtcorreo.Focus()
Else
xprom.Focus()
End If
End If
End Sub
22. Grabar y ejecutar la aplicacin
Ing. Alberto Moreno Cueva
Pgina
1245
Semana 9 : desarrollo de una aplicacin
examen virtual
Disear una aplicacin que me permita simular el examen virtual de operaciones bsicas de
del sistema operativo de Windows, este ejemplo es solo para 5 preguntas Ud. Debe de
presentarlo de 25 preguntas, lod temas sern dejados por el profesor del curso de
diferentes programas de la carrera.
Debe ingresar el nombre del postulante (tenga en cuenta el tiempo aun no se ejecuta)
En total son 50 preguntas que se deben contestar por medio de una opcin (trabajo
determinado para los usuarios finales aqu el time ya se toma en cuenta).
Por cada pregunta se debe desplazar hacia la siguiente respuesta teniendo la opcin de
regresar y corregir la pregunta contestada al final debe mostrarle su nota en un mensaje.
Ing. Alberto Moreno Cueva
Pgina
1246
Mostrara como resultado una pequea estadstica de las preguntas correctas, en blanco y
las que contesto en forma incorrecta.
Cuando cierra la ventana notara que hay otro mensaje si ha reprobado su examen.
Como resultado final de la operacin se debe generar un archivo de texto en la carpeta bin
de la aplicacin con un resumen de su examen.
Ing. Alberto Moreno Cueva
Pgina
1247
Este archivo se generara en esta ruta segn mi programacin
c:\gahExamen\gahProExamenNet\bin\Debug
E aqu un demo que le servir como crear dicha aplicacin para que despus lo aplique en
su trabajo de medio ciclo correspondiente.
Crear una aplicacin teniendo en cuenta los siguientes criterios (las inciales de los
apellidos y nombres).
Crear una solucin en blanco con el siguiente nombre.
En el nombre se debe denotar lo siguiente.
As se presentara la solucin.
Luego proceder a agregar un proyecto con el siguiente nombre (siga los padrones que ya
se le indicaron) en mi caso gahProExamenNet
galopin
o
alberc
a
herna
n
Nombre de la
solucin
Ing. Alberto Moreno Cueva
Pgina
1248
Debe mostrar la siguiente ventana
Elimine el formulario que se muestra por defecto.
Agregar un modulo para la declaraciones de los arrays que manejaran las los datos de la
aplicacin con el siguiente nombre que ya se les indico en mi caso gahModuleExamenNet
mostrara la siguiente ventana.
Luego debe crear una carpeta y en ella copiar y pegar las
imgenes que usara en la solucin de la aplicacin muestra la siguiente ventana.
Agregar los otros formulario a su proyecto mostrando la siguiente ventana.
Ing. Alberto Moreno Cueva
Pgina
1249
Programacin del Modulo ( )
Ing. Alberto Moreno Cueva
Pgina
1250
Programacin del formulario
Debe usar los siguientes controles 1 groupbox, 1 textbox, 2 button, 1 picturebox
El size del formulario debe de ser de 357, 159
Ing. Alberto Moreno Cueva
Pgina
1251
PROGRAMACION DE LOS BOTONES
'variable nom asume del nombre del usuario
'validarlo para que solo acepte letras y espacios en blanco
NOM = txtnom.Text.ToUpper
If Trim(txtnom.Text) = "" Or IsNumeric(txtnom.Text) = True Then
MessageBox.Show("Olvido escribir su Nombre", "Error", MessageBoxButtons.OK,
MessageBoxIcon.Error)
txtnom.Text = ""
txtnom.Focus()
Else
Me.Hide()
gahfrmpre.ShowDialog()
End If
If MessageBox.Show("Deseas salir ?", "Cuidado...", MessageBoxButtons.YesNo,
MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
Me.Close()
Else
txtnom.Text = ""
txtnom.Focus()
End If
Programacin del formulario
Ing. Alberto Moreno Cueva
Pgina
1252
Controles a usar 3 picturebox, 1 textbox, 11 label, 2 groupbox, 1 button, 4 radio button.
Tenga en cuenta q el tiempo de las preguntas es de 20 seg. Por cada una de no contestarla
debe pasar a la siguiente pregunta para no regresar a corregirla si la contesta en forma
incorrecta tiene la posibilidad de regresar a corregirla, el botn terminar solo sebe mostrase
cuando contesto la ltima pregunta.
El size del formulario debe ser de 731, 597
Ing. Alberto Moreno Cueva
Pgina
1253
Leer(0)
Mostrar(L)
POS = 1
grbNPre.Text = "Pregunta " & POS
S(L) = rbt1.Text 'determina que radio button fue seleccionado
O(L) = "A" ' cuando escojio la respuesta a, seria igual para los otros radio button
S(L) = rbt2.Text
O(L) = "B"
S(L) = rbt3.Text
O(L) = "C"
S(L) = rbt4.Text
O(L) = "D"
Correctas()
Dim NA As String
Dim x As Int32
For x = 0 To O.GetUpperBound(0)
If Convert.ToString(A.GetValue(x)) = Convert.ToString(O.GetValue(x)) And
Convert.ToString(O.GetValue(x)) <> "" Then
Correctos += 1
Ing. Alberto Moreno Cueva
Pgina
1254
ElseIf Convert.ToString(A.GetValue(x)) <> Convert.ToString(O.GetValue(x)) And
Convert.ToString(O.GetValue(x)) <> "" Then
Incorrectos += 1
Else
SinLlenar += 1
End If
Next
MessageBox.Show("Su Nota es :" & Correctos & "", "Fin del Exmen",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
'determina la ruta para q el archivo tome el nombre del usuario q esta dando el
examen.
NA = Application.StartupPath & "\" & NOM & ".txt"
'crea un archivo para escritura
FileOpen(1, NA, OpenMode.Binary, OpenAccess.ReadWrite)
'por cada fila del archivo se escribe el contenido de la variables
FilePut(1, "Su nombre es : " & NOM & " ")
' la funcion vbcrlf salta una linea a la izquierda
FilePut(1, vbCrLf)
FilePut(1, vbCrLf)
FilePut(1, "Su nota es : " & Correctos & "")
FilePut(1, vbCrLf)
FilePut(1, vbCrLf)
FilePut(1, " Resultados finales en : " & TIEMPO & " min fecha : " & Now.Day & " / " &
Now.Month & " / " & Now.Year)
FilePut(1, vbCrLf)
FilePut(1, "-------------------------------------------------------------")
FilePut(1, vbCrLf)
FilePut(1, vbCrLf)
FilePut(1, " Correctas - Marcadas ")
FilePut(1, vbCrLf)
FilePut(1, "---------------------------------------")
FilePut(1, vbCrLf)
'la funcion getupperbound determina el valor del indice
For x = 0 To A.GetUpperBound(0)
'getvalue captura el contenido de la variable
'convert.tostring pasa un valor determinado a una cadena
If Convert.ToString(A.GetValue(x)) = Convert.ToString(O.GetValue(x)) And
Convert.ToString(O.GetValue(x)) <> "" Then
FilePut(1, "" & x + 1 & ")" & " " & Convert.ToString(A.GetValue(x)) & " "
& _
Convert.ToString(O.GetValue(x)) & " CORRECTA")
FilePut(1, vbCrLf)
ElseIf Convert.ToString(A.GetValue(x)) <> Convert.ToString(O.GetValue(x)) And
Convert.ToString(O.GetValue(x)) <> "" Then
FilePut(1, "" & x + 1 & ")" & " " & Convert.ToString(A.GetValue(x)) & " "
& _
Convert.ToString(O.GetValue(x)) & " INCORRECTA")
FilePut(1, vbCrLf)
Else
Ing. Alberto Moreno Cueva
Pgina
1255
FilePut(1, "" & x + 1 & ")" & " " & Convert.ToString(A.GetValue(x)) & " "
& _
Convert.ToString(O.GetValue(x)) & " EN BLANCO")
FilePut(1, vbCrLf)
End If
Next
'cierra al archivo de escritura
FileClose(1)
Me.Hide()
FR.ShowDialog()
L -= 1 : POS -= 1
PicSig.Enabled = True
If L <= 0 Then
L = 0 : POS = 1 : PicAnt.Enabled = False
PicSig.Enabled = True
End If
Mostrar(L)
grbNPre.Text = "Pregunta " & POS
rbt1.Checked = False
rbt2.Checked = False
rbt3.Checked = False
rbt4.Checked = False
L += 1 : POS += 1
PicAnt.Enabled = True
If L >= 4 Then 'L determina la longitud del array
L = 4 : POS = 5 : PicSig.Enabled = False ' Pos determina el indice del array
PicAnt.Enabled = True
End If
Mostrar(L)
grbNPre.Text = "Pregunta " & POS
El cdigo que falta debe de determinarlo
'programar para q el titulo del formulario tenga el efecto de mobimiento
Me.Text = Mid(Me.Text, 2) + Microsoft.VisualBasic.Left(Me.Text, 1)
El cdigo que falta debe de determinarlo
ss = ss + 1
Ing. Alberto Moreno Cueva
Pgina
1256
If ss = 60 Then
ss = 0
mm = mm + 1
If mm = 60 Then
mm = 0
Timer2.Enabled = False
Me.Hide()
FR.Show()
End If
End If
txttime.Text = Format(mm, "00") + ":" + Format(ss, "00")
TIEMPO = txttime.Text
Programacin del formulario
Controles a usar 1 listbox,5 label, 1 groupbox, 1 picturebox, 3 textbox, 1 button
El size del formulario es 416, 488
Sub Salir()
If Correctos > 10 Then
MessageBox.Show("Estas bien , progresando", "Observacin")
Else
MessageBox.Show("Estudie e Intente Otra Vez", "Atencin")
End If
Application.Exit()
End sub
Ing. Alberto Moreno Cueva
Pgina
1257
txtCorrecto.Text = Correctos
txtIncorrecto.Text = Incorrectos
txtBlanco.Text = SinLlenar
If Correctos = 0 Then lblCorrecto.Visible = False
If Incorrectos = 0 Then lblIncorrecto.Visible = False
If SinLlenar = 0 Then lblBlanco.Visible = False
lblCorrecto.Location = New Point(96, 352 - Correctos * 16.4)
lblIncorrecto.Location = New Point(192, 352 - Incorrectos * 16.4)
lblBlanco.Location = New Point(288, 352 - SinLlenar * 16.4)
Salir()
Determinar este codigo como se muestra
Private Sub gahResultadoExamenNet_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Salir()
End Sub
Desarrollo de Integraciones Manejo de tems
La manipulacin de datos se desarrolla con el manejo de una estructura y de dimensiones con el almacenamientos
de datos dentro de un archivo el ser ledo tantas veces como el usuario lo desee.
Planteamiento del problema.
Ing. Alberto Moreno Cueva
Pgina
1258
Ing. Alberto Moreno Cueva
Pgina
1259
Establecer como formulario de inicio al frmServicio.
Ing. Alberto Moreno Cueva
Pgina
1260
Ing. Alberto Moreno Cueva
Pgina
1261
Ing. Alberto Moreno Cueva
Pgina
1262
Ing. Alberto Moreno Cueva
Pgina
1263
Ing. Alberto Moreno Cueva
Pgina
1264
Ing. Alberto Moreno Cueva
Pgina
1265
Ing. Alberto Moreno Cueva
Pgina
1266
Semana 11 : (Programacin Orientada a Objetos)
La programacin orientada a objetos es una evolucin de la programacin procedural basada en
funciones. La POO nos permite agrupar secciones de cdigo con funcionalidades comunes.
Una de las principales desventajas de la programacin procedural basada en funciones es su
construccin, cuando una aplicacin bajo este tipo de programacin crece, la modificacin del
cdigo se hace muy trabajosa y difcil debido a que el cambio de una sola lnea en una funcin,
puede acarrear la modificacin de muchas otras lneas de cdigo pertenecientes a otras funciones
que estn relacionadas.
Con la programacin orientada a objetos se pretende agrupar el cdigo encapsulndolo y
hacindolo independiente, de manera que una modificacin debida al crecimiento de la aplicacin
solo afecte a unas pocas lneas.
Las clases
Definen la estructura que van a tener los objetos que se creen a partir de ella, indicando que
propiedades y mtodos tendrn los objetos.
Los objetos
Se crean a partir de una serie de especificaciones o normas que definen como va a ser el objeto,
esto es lo que en POO se conoce como una clase.
Las propiedades definen los datos o informacin del objeto, permitiendo modificar o consultar su
estado, mientras que los mtodos son las rutinas que definen el comportamiento del objeto.
La creacin de un objeto a partir de una clase se conoce como instanciacin de un objeto.
Para explicar la creacin de clases usaremos un ejemplo sencillo basado en una clase principal
"bicicleta".
Para crear una clase debemos definir sus propiedades y sus mtodos, en este ejemplo se usan
los siguientes trminos como propiedades de la clase bicicleta: Modelo, Precio,
NumeroDeVelocidades y Velocidad; como mtodos de la clase se usan: Acelerar(km) , Frenar() y
ConsultarVelocidad().
Public Class Bicicleta
Public Modelo as String
Public Precio as Double
Public NumeroDeVelocidades as Integer
Private Velocidad as Integer
Public Sub Acelerar()
Velocidad = Velocidad + 1
End Sub
Ing. Alberto Moreno Cueva
Pgina
1267
Public Sub Frenar()
If Velocidad > 0 Then
Velocidad = Velocidad -1
End If
End Sub
Public Function ConsutarVelocidad() As Integer
Return Velocidad
End Function
End Class
Nuestra clase bicicleta consta de varias propiedades y mtodos, las palabras Private y Public
definen la accesibilidad de las propiedades, funciones o subrutinas. La definicin de una propiedad
o mtodo de tipo privado indica que slo podr ser usada dentro del cdigo de la misma clase, si
cresemos un objeto de tipo bicicleta, las especificaciones de la clase no nos permitiran acceder
a la propiedad velocidad para consultarla o modificarla, ya que esta definida como privada. En
cambio se pueden usar las subrutinas Acelerar() y Frenar() ya que son de tipo Public, y desde
dentro de ellas se interacta con las propiedades privadas, con esto conseguimos encapsular el
cdigo y hacer accesible solo aquello que queramos.
Una vez est construida la clase ya se pueden instanciar objetos de la misma.
Dim objBicicleta as New Bicicleta
Dim VelocidadActual as Integer
objBicileta.Modelo = "Montaa"
objBicicleta.Precio = 200
objBicicleta.NumeroDeVelocidades = 21
objBicicleta.Acelerar()
objBicicleta.Frenar()
VelocidadActual = objBicicleta.ConsultarVelocidad
Tras la creacin del objeto objBicicleta a partir de la clase, se pueden modificar los valores de las
propiedades de tipo Public, y llamar a los mtodos de tipo Public.
En el ejemplo se llama a los mtodos Acelerar(5), pasndole el numero de Km. que queremos
acelerar a travs del parmetro "Km." que est definido en la subrutina.
Luego se llama al mtodo Frenar() que decrementa en una unidad el valor de la propiedad
Velocidad.
Por ltimo se
usa la funcin
Ing. Alberto Moreno Cueva
Pgina
1268
ConsultarVelocidad(), que retorna el valor de la propiedad Velocidad para introducirlo en la
variable VelocidadActual.
Ing. Alberto Moreno Cueva
Pgina
1269
Ejemplo Practico en Vb Net
1.- Crear una clase llamada "Operaciones que tenga la propiedad n1 y n2 donde se guardaran 2
nmeros.
Debe tener tambin un mtodo llamado "Operar el cual recibir un signo (+,-,*, /) y segn ese
signo se har una operacin aritmtica
'En el modulo
Module Module1
Public Class Operaciones
Public N1 As Integer
Public N2 As Integer
Function Operar(ByVal Signo As String)
Select Case SIgno
Case "+" : Operar = N1 + N2
Case "-" : Operar = N1 - N2
Case "*" : Operar = N1 * N2
Case "/" : Operar = N1 / N2
Case Else : Operar = 0
End Select
End Function
End Class
End Module
'En el formulario
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim S As String = InputBox("Ingrese signo a operar (+,-,*,/) ")
Dim X As New Operaciones
Ing. Alberto Moreno Cueva
Pgina
1270
X.N1 = Val(Me.TextBox1.Text)
X.N2 = Val(Me.TextBox2.Text)
Me.Lblres.Text = X.Operar(S)
End Sub
End Class
'Aqu hay otro ejemplo de una clase "Formulario"
Public Class Formulario
Public Miform As Form
Public Fuente As Font
Sub ColorFondo(ByVal Fondo As Color)
Miform.BackColor = Fondo
End Sub
Sub FuenteTextos()
Dim Obj As Object
For Each Obj In Miform.Controls
If TypeOf Obj Is TextBox Then
Obj.Font = Fuente
End If
Next
End Sub
End Class
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
Dim x As New Formulario
x.Miform = Me
x.Fuente = New Font("Arial Black", 10, FontStyle.Bold)
Ing. Alberto Moreno Cueva
Pgina
1271
x.ColorFondo(Color.Aquamarine)
x.FuenteTextos()
End Sub
Los tres pilares de la Programacin Orientada a Objetos
Segn se dice por ah, cualquier lenguaje basado en objetos debe cumplir estos tres requisitos:
1. Herencia
2. Encapsulacin
3. Polimorfismo
Ing. Alberto Moreno Cueva
Pgina
1272
Semana 12 : (Constructores y Sobrecarga)
Toda clase tiene por lo menos un constructor aun si no es declarado explcitamente java
le genera uno por defecto.
El constructor es un mtodo que se ejecuta al inicializar el objeto y su contenido de
cdigo generalmente inicializa las variables o propiedades de la clase.
El nombre de un mtodo constructor debe ser siempre el nombre de la clase.
Que es sobrecargado de metodos?
La sobrecarga de mtodos consiste en poner varios mtodos con el mismo nombre en la
misma clase, pero siempre que su lista de argumentos sea distinta. Ojo, repito, siempre
que su lista de argumentos sea distinta, es decir, no puede haber dos mtodos que se
llamen igual con la misma lista de argumentos, aunque devuelvan datos de distinto tipo.
El compilador sabra a cul de todas las sobrecargas nos referimos por los argumentos
que se le pasen en la llamada, pero no sera capaz de determinar cul de ellas debe
ejecutar si tienen la misma lista de argumentos.
Ejemplo .-Realizar el ingreso de nuevos alumnos y almacenarlos en un listbox , se debe calcular
su promedio para cada uno.
Public Class Form1
Dim ves As estudiante
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
End Sub
Private Sub BtnAcepta_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs)
Handles BtnAcepta.Click
ves = New estudiante
ves.nombre = Me.txtnom.Text
ves.exf = CInt(Me.txtEf.Text)
Ing. Alberto Moreno Cueva
Pgina
1273
ves.exp = CInt(Me.txtep.Text)
Me.txtnom.Clear()
txtEf.Clear() : txtep.Clear()
txtnom.Focus()
BtnMuestra_Click(sender, e)
End Sub
Private Sub BtnMuestra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles BtnMuestra.Click
Dim strfrm As String
strfrm = "{0,-25}{1,15}"
'ListBox1.Items.Clear()
ListBox1.Items.Add(String.Format(strfrm, ves.nombre, ves.obser))
End Sub
End Class
Class estudiante
Private m_nom As String
Private m_exp As Integer
Private m_Exf As Integer
Public Property nombre() As String
Get
Return m_nom
End Get
Set(ByVal value As String)
m_nom = value
End Set
Ing. Alberto Moreno Cueva
Pgina
1274
End Property
Public WriteOnly Property exf() As Integer
Set(ByVal value As Integer)
m_Exf = value
End Set
End Property
Public WriteOnly Property exp() As Integer
Set(ByVal value As Integer)
m_exp = value
End Set
End Property
Function obser() As String
Dim pro As Single, obs$
pro = (m_exp + 2 * m_Exf) / 3
obs = ""
Select Case pro
Case 0 To 6 : obs = "deficiente"
Case 7 To 10 : obs = "desparobado"
Case 11 To 15 : obs = "aprobado"
Case 16 To 20 : obs = "excelente"
End Select
Return obs
End Function
End Class
Ejemplo.- Elaborar una calculadora empleando clases.
Ing. Alberto Moreno Cueva
Pgina
1275
Public Class Form2
Dim adder As New AddingMachine()
Dim calc As New Calculator()
Private Sub Form2_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
End Sub
Private Sub btnadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnadd.Click
adder.FirstNumber = CDbl(txtn1.Text)
adder.SecondNumber = CDbl(txtn2.Text)
Me.txtres.Text = CStr(adder.Add)
End Sub
Private Sub rdmac_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rdmac.CheckedChanged
btnMul.Visible = False
btndiv.Visible = False
End Sub
Private Sub rdCalcula_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rdCalcula.CheckedChanged
btnMul.Visible = True
btndiv.Visible = True
End Sub
Private Sub btnres_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnres.Click
adder.FirstNumber = CDbl(txtn1.Text)
adder.SecondN
Ing. Alberto Moreno Cueva
Pgina
1276
umber = CDbl(txtn2.Text)
Me.txtres.Text = CStr(adder.Subtract)
End Sub
Private Sub btnMul_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnMul.Click
calc.FirstNumber = CDbl(txtn1.Text)
calc.SecondNumber = CDbl(txtn2.Text)
txtres.Text = CStr(calc.Multiply)
End Sub
Private Sub btndiv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btndiv.Click
calc.FirstNumber = CDbl(txtn1.Text)
calc.SecondNumber = CDbl(txtn2.Text)
txtres.Text = CStr(calc.Divide)
End Sub
End Class
Class AddingMachine
Private m_num1, m_num2 As Double
Public Property FirstNumber() As Double
Get
Return m_num1
End Get
Set(ByVal value As Double)
m_num1 = value
End Set
End Property
Public
Property
Ing. Alberto Moreno Cueva
Pgina
1277
SecondNumber() As Double
Get
Return m_num2
End Get
Set(ByVal value As Double)
m_num2 = value
End Set
End Property
Function Add() As Double
Return FirstNumber + SecondNumber
End Function
Function Subtract() As Double
Return FirstNumber - SecondNumber
End Function
End Class
Class Calculator
Inherits AddingMachine
'Calculator inherits properties FirstNumber and SecondNumber
'and functions Add() and Subtract().
Function Multiply() As Double
Return FirstNumber * SecondNumber
End Function
Function Divide() As Double
Return FirstNumber / SecondNumber
End Function
End Class
Ing. Alberto Moreno Cueva
Pgina
1278
PROBLEMAS PROPUESTOS DE CLASES
1.- Realizar una clase vendedor para llevar el control de sus ventas , cuando se crea la clase todo
vendedor debe empezar con cierta cantidad ; el precio del producto se asigna inicialmente , se
deben crear los siguientes mtodos:
Void vender(int cant) .-, Solo se puede vender si hay una cantidad de disponible y por cada
venta se tiene que disminuir la cantidad inicial y acumular su monto
Para hacer la prueba crear dos objetos vendedores que parten con cierta cantidad que se le
asigna , cambiar un nuevo precio del vendedor 2 ingresado por teclado.
-Comprar cantidades del vendedor 1 y 2 ingresando por teclado la cantidad.
- Imprimir su totales ventas por cada vendedor.
2.- Crear la clase Ahorro : String nrocta, String Cliente,double saldo
crear los mtodos accesores y constructores para la clase para asignar los datos e imprimirlos.
Tambin deber crear los mtodos Deposito (que acepte un monto e incrementar el saldo) y el
mtodo Retiro (que acepte un monto pero solo se podr retirar si tiene saldo disponible de lo
contrario muestre un mensaje de error).
Comprobarlo en un programa principal. (6
SuperVendedor
Static double
precio=120;
Un constructor (int cantidad) .- debe pasar la
cantidad a vender
Void cambiaPrecio( double nuevoPrecio)
Ing. Alberto Moreno Cueva
Pgina
1279
Semana 13 : (Herencias e Interfaces)
Segn la documentacin de Visual Studio .NET:
Una relacin de herencia es una relacin en la que un tipo (el tipo derivado) se deriva de otro (el
tipo base), de tal forma que el espacio de declaracin del tipo derivado contiene implcitamente
todos los miembros de tipo no constructor del tipo base.
La herencia es la cualidad de crear clases que estn basadas en otras clases. La nueva clase
heredar todas las propiedades y mtodos de la clase de la que est derivada, adems de poder
modificar el comportamiento de los procedimientos que ha heredado, as como aadir otros
nuevos.
Supongamos que tenemos una clase Gato que est derivada de la clase Animal.
El Gato hereda de Animal todas las caractersticas comunes a los animales, adems de aadirle
algunas caractersticas particulares a su condicin felina.
Podemos decir que un Gato es un Animal, lo mismo que un Perro es un Animal, ambos estn
derivados (han heredado) de la clase Animal, pero cada uno de ellos es diferente, aunque en el
fondo los dos son animales.
Esto es herencia: usar una clase base (Animal) y poder ampliarla sin perder nada de lo heredado,
pudiendo ampliar la clase de la que se ha derivado (o heredado).
Encapsulacin
Segn la documentacin de Visual Studio .NET:
La encapsulacin es la capacidad de contener y controlar el acceso a un grupo de elementos
asociados. Las clases proporcionan una de las formas ms comunes de encapsular elementos.
Cuando usamos las clases, stas tienen una serie de caractersticas (los datos que manipula) as
como una serie de comportamientos (las acciones a realizar con esos datos). Pues la
encapsulacin es esa capacidad de la clase de ocultarnos sus interioridades para que slo
veamos lo que tenemos que ver, sin tener que preocuparnos de cmo est codificada para que
haga lo que hace... simplemente nos debe importar que lo haga.
Si tomamos el ejemplo de la clase Gato, sabemos que araa, come, se mueve, etc., pero el cmo
lo hace no es algo que deba preocuparnos, salvo que se lance sobre nosotros... aunque, en ese
caso, lo que deberamos tener es una clase "espanta-gatos" para quitrnoslo de encima lo antes
posible...
Polimorfismo
Ing. Alberto Moreno Cueva
Pgina
1280
Segn la documentacin de Visual Studio .NET:
El polimorfismo se refiere a la posibilidad de definir mltiples clases con funcionalidad diferente,
pero con mtodos o propiedades denominados de forma idntica, que pueden utilizarse de
manera intercambiable mediante cdigo cliente en tiempo de ejecucin.
el Polimorfismo nos permite usar miembros de distintas clases de forma genrica sin tener que
preocuparnos si pertenece a una clase o a otra.
Siguiendo con el ejemplo de los animales, si el Gato y el Perro pueden morder podramos tener un
"animal" que muerda sin importarnos que sea el Gato o el Perro, simplemente podramos usar el
mtodo Morder ya que ambos animales tienen esa caracterstica "animal mordedor".
Ejemplo.- Se tiene una clase principal vehiculo que puede ser carro o camion , si es carro paga un
peaje S/3.2 y si es caminon se paga el doble , mostrar en cada instante lo recaudado y cuantos
vehiculos se han procesado.
Codificacion
Public Class frmherencia
Dim cls As New vehiculo
Dim tipo As New recauda
Private Sub frmherencia_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
lbnro.Text = cls.cuenta
If Me.rdCamion.Checked Then
Me.lbtot.Text = tipo.camion
Else
Me.lbtot.Text = tipo.carro
End If
End Sub
Ing. Alberto Moreno Cueva
Pgina
1281
End Class
Class vehiculo
Private m_can As Integer
Private sm1, sm2 As Single
Sub New()
m_can = 0
sm1 = 0
sm2 = 0
End Sub
Function cuenta() As Integer
m_can = m_can + 1
Return m_can
End Function
End Class
Class recauda
Inherits vehiculo
Private sm1, sm2 As Single
Function carro() As Single
sm1 = sm1 + 3.2
Return sm1
End Function
Function camion() As Single
sm2 = sm2 + 6.4
Return sm2
End Function
End Class
Ing. Alberto Moreno Cueva
Pgina
1282
Ejemplo de Polimorfismo y Mybase
La observacion es de acuerdo al puntaje que se obtiene
como promedio , si es un estudiante de primaria o
secundaria ; si es de primaria el promedio se le asigna
una letra correspondiente, y si es de secundaria el
promedio que le corresponde.
Codificacion
Public Class frmPoliformismo
Dim students(49) As Student 'Stores the class
Dim lastStudentAdded As Integer = -1 'Last student added to students
Private Sub frmPoliformismo_Load(.) Handles MyBase.Load
End Sub
Private Sub BtnAcepta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles BtnAcepta.Click
Dim pupil As Student
'Create the appropriate object depending upon the radio button.
If Me.RdFail.Checked Then
pupil = New PFStudent()
Else
pupil = New Student()
End If
'Store the values in the text boxes into the object.
Ing. Alberto Moreno Cueva
Pgina
1283
pupil.Name = txtnom.Text
pupil.SocSecNum = txtnum.Text
pupil.Midterm = CDbl(txtep.Text)
pupil.Final = CDbl(txtEf.Text)
'Add the student to the array.
lastStudentAdded += 1
students(lastStudentAdded) = pupil
'Clear text boxes and list box.
txtnom.Clear()
txtnum.Clear()
txtep.Clear()
txtEf.Clear()
ListBox1.Items.Add("Student #" & lastStudentAdded + 1 _
& " recorded.")
End Sub
Private Sub BtnMuestra_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles BtnMuestra.Click
'Display the students' information and semester grade.
Dim fmtStr As String = "{0,-20}{1,-15}{2,-4}"
ListBox1.Items.Clear()
'Loop over all available elements of the Student array.
For i As Integer = 0 To lastStudentAdded
ListBox1.Items.Add(String.Format(fmtStr, students(i).Name, _
students(i).SocSecNum, students(i).CalcSemGrade))
Next
Ing. Alberto Moreno Cueva
Pgina
1284
End Sub
End Class
Class Student
'Member variables to hold the property values
Private m_name As String
Private m_ssn As String
Private m_midterm As Double
Private m_final As Double
Public Property Name() As String
'The student's name
Get
Return m_name
End Get
Set(ByVal value As String)
m_name = value
End Set
End Property
Public Property SocSecNum() As String
'The student's Social Security Number
Get
Return m_ssn
End Get
Set(ByVal value As String)
m_ssn = value
End Set
End Property
Ing. Alberto Moreno Cueva
Pgina
1285
Public WriteOnly Property Midterm() As Double
'The student's score on the midterm exam
Set(ByVal value As Double)
m_midterm = value
End Set
End Property
Public WriteOnly Property Final() As Double
'The student's score on the final exam
Set(ByVal value As Double)
m_final = value
End Set
End Property
Overridable Function CalcSemGrade() As String
'The student's grade for the semester
Dim grade As Double
'The grade is based upon average of the midterm and final exams.
grade = (m_midterm + m_final) / 2
grade = Math.Round(grade) 'Round the grade.
Select Case grade
Case Is >= 90 : Return "A"
Case Is >= 80 : Return "B"
Case Is >= 70 : Return "C"
Case Is >= 60 : Return "D"
Case Else
Return "F"
End Select
Ing. Alberto Moreno Cueva
Pgina
1286
End Function
End Class
Class PFStudent
Inherits Student
Overrides Function CalcSemGrade() As String
'The student's grade for the semester
'If MyBase.CalcSemGrade = "F" Then
' Return "Fail"
'Else
' Return "Pass"
'End If
Select Case MyBase.CalcSemGrade
Case "A", "B" : Return "Aprobado"
Case "C", "D", "F" : Return "desaprobado"
End Select
End Function
End Class
Ejercicios Propuestos
OBJETIVO.- que el alumno sea capaz de desarrollar sus programas en bases a clases POO.
1.- Disee e implemente en Java una clase para trabajar con tringulos issceles. Para ello, defina
las variables de ejemplar mnimas que requiera, proporcione mtodos de consulta, un mtodo
constructor e implemente otros mtodos para calcular el permetro y el rea de un tringulo.
2.-Implemente una clase llamado banco ,con los atributos nro de cuenta , nombre del cliente ,
tipo de ahorro( D=dlar y S=soles) y el saldo; Implemente los mtodos para deposito , retiro de
dinero. y los mtodos constructores respectivos.
Esta aplicacin implemntelo :
a) Primero en modo de consola , empleando un ArrayList para almacenar un conjunto de
clientes , se debe elaborar un men que contemple las siguientes opciones:
Ing. Alberto Moreno Cueva
Pgina
1287
(1) Nuevos ahorristas
(2) Consulta de Saldos
(3) Movimiento de Cuentas
(4) Listado de Ahorristas
(5) Anulacin de cuentas
(6) Salir
En la opcin 2 se realiza la bsqueda por medio de un numero de cuenta
En la opcin 3 se realiza el deposito o retiro a travs de un numero de cuenta
actualizando el saldo respectivo.
La anulacin tambin se realiza por medio del nro de cuenta.
b) Realizar la misma aplicacin pero empleando formularios.
Ing. Alberto Moreno Cueva
Pgina
1288
Semana 14 : (Programacion Con Ado . Net)
ADO .NET es la nueva versin del modelo de objetos ADO (ActiveX Data Object), es decir la
estrategia que ofrece Microsoft para el acceso a datos. ADO .NET ha sido ampliado para cubrir
todas las necesidades que ADO no ofreca, y esta diseado para trabajar con conjuntos de datos
desconectados, lo que permite reducir el trafico de red. ADO .NET utiliza XML con formato
universal de transmisin de los datos.
Estructura del modelo de objetos
Ambitos con nombre de ADO .NET
La instalacion por defecto de la plataforma .NET aporta cinco ambitos con nombre namespaces
relacionados con ADO.NET, a los cuales habria que aadir uno o mas por cada proveedor
adicional que pudieramos instalar despus. Estos cinco ambitos son:
System.Data: Aloja las clases independientes del origen de datos, asi como las interfaces que
deben implementar las clases dependientes.
System.Data.Common: Contiene clases que facilitan la implementacion de las interfaces
existentes en System,.Data por parte de los distintos proveedores de datos, asi como otras
compartidas por todos los proveedores.
System.Data.OleDb : Corresponde al proveedor ADO.NET que permite utilizar cualquier
controlador OLE DB para conectar con un origen de datos. En el se encuentran
implementaciones especificas de clases para comunicarse mediante OLE DB.
Ing. Alberto Moreno Cueva
Pgina
1289
System.Data.SqlClient : Como el anterior, alberga clases especificas para operar sobre un
determinado origen de datos, en este caso SQL Server.
System.Data.OracleClient : Correspondiente al proveedor nativo para acceso a datos Oracle.
Al igual que System.Data.SqlClient o Sytem.Data.OleDb, contiene implementaciones
especificas de clases que facilitan la conexin y comunicacin con este RDBMS (Sistema de
administracin de base de datos Relacional).
Proveedores de acceso a datos
Los proveedores de acceso a datos es la capa inferior de la parte correspondiente al acceso de
datos y es la responsable de establecer la comunicacin con las fuentes de datos.
En este conjunto de nombres de espacio, encontraremos casi siempre las clases Connection,
Command, DataAdapter y DataReader como las clases ms generales, las cuales nos permiten
establecer la conexin con la fuente de datos.
Proveedor de acceso a datos de .NET Framework
Dentro del entorno .NET Framework, encontramos un nutrido conjunto de proveedores de acceso
a datos.
Estos son los siguientes:
ODBC .NET Data Provider
OLE DB .NET Data Provider
Oracle Client .NET Data Provider
SQL Server .NET Data Provider
Estos proveedores de acceso a datos incluidos en Microsoft .NET Framework, los podemos
encontrar en los nombres de espacio:
System.Data.Odbc
System.Data.OleDb
System.Data.OracleClient
System.Data.SqlClient
El objeto Connection
Este objeto es el encargado de establecer una conexin fsica con una base de datos
determinada.
Para establecer la conexin con una determinada fuente de datos, no slo debemos establecer la
cadena de conexin correctamente, sino que adems deberemos usar los parmetros de conexin
y el proveedor de acceso a datos adecuado.
Con este objeto, podremos adems abrir y cerrar una conexin.
Ing. Alberto Moreno Cueva
Pgina
1290
El objeto Command
Este objeto es el que representa una determinada sentencia SQL o un Stored Procedure.
Aunque no es obligatorio su uso, en caso de necesitarlo, lo utilizaremos conjuntamente con el
objeto DataAdapter que es el encargado de ejecutar la instruccin indicada.
El objeto DataAdapter
Este objeto es quizs el objeto ms complejo y a la vez complicado de todos los que forman parte
de un proveedor de acceso a datos en .NET.
Cuando deseamos establecer una comunicacin entre una fuente de datos y un DataSet,
utilizamos como intermediario a un objeto DataAdapter.
A su vez, un DataAdapter contiene 4 objetos que debemos conocer:
SelectCommand es el objeto encargado de realizar los trabajos de seleccin de datos con
una fuente de datos dada.
En s, es el que se encarga de devolver y rellenar los datos de una fuente de datos a un
DataSet.
DeleteCommand es el objeto encardago de realizar las acciones de borrado de datos.
InsertCommand es el objeto encardago de realizar las acciones de insercin de datos.
UpdateCommand es el objeto encardago de realizar las acciones de actualizacin de
datos.
Los objetos DeleteCommand, InsertCommand y UpdateCommand son los objetos que se utilizan
para manipular y transmitir datos de una fuente de datos determinada, al contrario del objeto
SelectCommand que tan slo interacta con la fuente de datos para recuperar una porcin o todos
los datos indicados en el objeto Command anteriormente comentado.
El objeto DataReader
Este objeto es el utilizado en una sla direccin de datos. Establece una conexin en un modo de
solo lectura.
Se trata de un objeto de acceso a datos muy rpido.
Este objeto puede usar a su vez el objeto Command o el mtodo ExecuteReader.
La clase DataSet
Ing. Alberto Moreno Cueva
Pgina
1291
Puede que sea la capa ms externa e importante del modelo ADO.NET, pero es la que contiene
quizs, el modelo de colecciones y trabajo que ms le puede resultar familiar al programador de
Visual Basic 6, sobre todo a los anteriormente comentados RecordSets.
El DataSet contiene en s, un conjunto de datos que han sido volcados desde el proveedor de
datos.
De esa forma, podemos trabajar con ellos como lo hacamos en Visual Basic 6 por ejemplo.
De hecho, por marcar una similitud con el RecordSet, el DataSet est preparado para trabajar con
fuentes de datos desconectadas.
La clase DataView
Este objeto nos permite crear mltiples vistas de nuestros datos, adems de permitirnos presentar
los datos.
Es la clase que nos permite representar los datos de la clase DataTable, permitindonos editar,
ordenar y filtrar, buscar y navegar por un conjunto de datos determinado.
La clase DataTable
Este objeto nos permite representar una determinada tabla en memoria, de modo que podamos
interactuar con ella.
A la hora de trabajar con este objeto, debemos tener en cuenta el nombre con el cul definamos
una determinada tabla, ya que los objetos declarados en en el DataTable es sensitivo a
maysculas y minsculas.
Lo que s est claro es que el modelo de datos de ADO.NET que hemos visto, quedara resumido
en cuanto a la conectividad de la manera en la que se representa en la figura.
Ing. Alberto Moreno Cueva
Pgina
1292
El objeto DataSet nos ofrece la posibilidad de almacenar datos, tablas y bases de datos de una
determinada fuente de datos.
De esta manera, podemos trabajar con las aplicaciones estando desconectados de la fuente de
datos.
Sin embargo, a veces necesitamos trabajar con la fuente de datos estando conectados a ella.
El objeto DataReader nos ofrece precisamente la posibilidad de trabajar con fuentes de datos
conectadas.
Por otro lado, el objeto DataReader tiene algunas particularidades que conviene conocer y que
veremos a continuacin.
Motor de Base de Datos
Microsoft Access
Este producto, que forma parte de la suite Microsoft office, es uno de los gestores de base de
datos mas populares del mercado, especialmente en instalaciones en las que el propio usuario
opera sobre la informacin.
Desde una aplicacin Visual Studio .NET podemos necesitar recuperar la informacin que el
usuario gestiona habitualmente utilizando Access o, incluso, crear una aplicacin que se encargue
de actuar como interfaz para ese usuario a fin de que no tenga que aprender a usar Access.
Estructura de una tabla creada en Access.
Ing. Alberto Moreno Cueva
Pgina
1293
Aplicacin 1:
Creara una carpeta llamada BDVisualNET, ser donde se almacenara el proyecto que crearemos.
Form1.Vb
Realizando la conexin, con el control
OleDbDataAdapter.
1. Nos ubicamos en la barra de herramientas,
seleccionamos el cuadro de herramientas
Datos, y buscamos el control
OleDbDataAdapter.
2. Le damos un clic en el control
OleDbDataAdapter y lo arrastramos al
formulario actual que estamos trabajando.
3. Nos mostrara un Asistente para la
configuracin del adaptador de datos.
Ing. Alberto Moreno Cueva
Pgina
1294
4. En elegir conexin de datos, crearemos una conexin nueva a la base de datos Access, le
damos clic en el boton Nueva conexin.
5. Nos ubicamos en la etiqueta Proveedor, y seleccionamos el Proveedor OLE DB => Microsoft
Jet 4.0 OLE DB Provider.
Ing. Alberto Moreno Cueva
Pgina
1295
6. Le damos clic en el botn siguiente.
7. En la ventana conexin seleccionamos la base de datos en Access ventas, como punto de
trabajo, le damos clic en el boton., para buscar la base de datos.
8. Le damos un clic en el botn Probar conexin, para verificar si la conexin fue satisfactori.
9. Luego de damos clic en el botn Aceptar.
Ing. Alberto Moreno Cueva
Pgina
1296
10. Le damos clic en el botn siguiente.
11. En el tipo de consulta, dejamos la seleccin por defecto, usar instrucciones SQL, el cual nos
permitir buscar la tabla o tablas para mostrar en nuestro DataGrid1. Le damos clic en
siguiente.
12. En este cuadro de Generar las instrucciones SQL, generamos una consulta, le damos clic en el
boton Generador de Consultas.
Ing. Alberto Moreno Cueva
Pgina
1297
13. En el Generador de Consultas, seleccionamos la tabla o tablas que deseamos visualizar, le
damos un clic en el boton Agregar, y clic en cerrar.
14. En la tabla agregada Clientes, marcamos el check , el nos permitir
mostrar todos los campos de la tabla Clientes.
Ing. Alberto Moreno Cueva
Pgina
1298
15. Notamos en la imagen que se genera una conjunto de sentencias SQL (Lenguaje de consulta
estructurado), el cual define los campos a mostrar, le damos un clic en el botn Aceptar.
16. Clic en el botn siguiente.
17. En esta pantalla nos muestra los resultados del asistente. El cual ha pasado toda la
configuracin correctamente.
Ing. Alberto Moreno Cueva
Pgina
1299
18. Clic en botn Finalizar.
19. Nos mostrar un cuadro de mensaje, el cual nos indicar si deseamos incluir o no la contrasea,
en nuestra configuracin, le damos clic en No incluir contrasea.
20. Notaremos que se agrego en el formulario 2 controles, producto de la configuracin realizada.
Una vez terminado la configuracin del OleDbDataAdapter.
21. Nos ubicamos en el formulario creado, y programamos lo siguiente.
CODIGO FUENTE
Public Class Form1
Ing. Alberto Moreno Cueva
Pgina
1300
Inherits System.Windows.Forms.Form
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim tbl As New DataTable
OleDbDataAdapter1.Fill(tbl)
DataGrid1.DataSource = tbl
lblregistros.Text = tbl.Rows.Count
End Sub
Private Sub CmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdSalir.Click
If MessageBox.Show("Desea Salir", "Listado de Registros", 4, 32) = 6 Then
Application.Exit()
End If
End Sub
End Class
Resultado del Formulario.
Ing. Alberto Moreno Cueva
Pgina
1301
Ing. Alberto Moreno Cueva
Pgina
1302
Semana 15 : (Trabajo de ambiente Conectado)
La capa conectada de ADO.NET contiene objetos especializados en la conexin con los
orgenes de datos. As, la clase genrica Connection se utiliza para establecer conexiones
a los orgenes de datos. La clase Command se encarga de enviar comandos de toda
ndole al origen de datos. Por fin la clase DataReader est especializada en leer los resultados
de los comandos.
La clase DataAdapter hace uso de las tres anteriores para actuar de puente entre
la capa conectada y la desconectada como veremos despus.
Estas clases son abstractas, es decir, no tienen una implementacin real de la que se pueda
hacer uso directamente. Es en este punto en donde entran en juego los proveedores de
datos. Cada origen de datos tiene un modo especial de comunicarse con los
programas que los utilizan, adems de otras particularidades que se deben contemplar.
Un proveedor de datos de ADO.NET es una implementacin concreta de las clases
conectadas abstractas que hemos visto, que hereda de stas y que tiene en cuenta ya todas
las particularidades del origen de datos en cuestin.
As, por ejemplo, las clases especficas para acceder a SQL Server se llaman
SqlConnection, SqlCommand, SqlDataReader y SqlDataAdapter y se encuentran bajo
el espacio de nombres System.Data.SqlClient. Es decir, al contrario que en ADO
clsico no hay una nica clase Connection o Command que se use en cada caso, si
no que existen clases especializadas para conectarse y recuperar informacin de cada tipo de
origen de datos.
En resumen: con la capa conectada de ADO.NET realizamos la conexin y comunicacin
con los orgenes de datos. Cada proveedor de datos implementa su propia versin
de las clases Connection, Command, DataReader y DataAdapter (entre otras).
Las clases derivadas de Connection se utilizan para realizar la conexin y enviar y recibir
informacin.
Las clases derivadas de Command permiten ejecutar sentencias SQL y procedimientos
almacenados en el gestor de datos.
Las clases derivadas de DataReader se emplean para obtener los posibles resultados de
un comando utilizando para ello el conducto de comunicacin establecido por Connection.
Aplicacion Empleando la Clase OledbDataReader
Ing. Alberto Moreno Cueva
Pgina
1303
Codificacin
Imports System.Data.OleDb
Public Class frmProveedor
Inherits System.Windows.Forms.Form
+Codigo Generado
Dim cn As New OleDbConnection("provider=sqloledb;uid=sa;pwd=;database=northwind; server=.")
Dim cmd As New OleDbCommand()
Dim rdp As OleDbDataReader
Dim rds As OleDbDataReader
Dim prm As OleDbParameter
Private Sub frmProveedor_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
cn.Open()
cmd.Connection = cn
cmd.CommandType = CommandType.Text
Controles empleados Combobox1
Y Listbox con nombre Lstproducto
Clases empleadas:
OleDbdataReader.- Proporciona el
modo de lectura de una secuencia de
filas de datos de tipo slo avance de un
origen de datos. Esta clase no se puede
heredar.
Para crear OleDbDataReader, se debe
llamar al mtodo ExecuteReader del
objeto OleDbCommand, en lugar de
utilizar directamente un constructor.
Ing. Alberto Moreno Cueva
Pgina
1304
cmd.CommandText = "select supplierId from suppliers"
rdp = cmd.ExecuteReader
While rdp.Read
cboproveedor.Items.Add(rdp("supplierId")).ToString()
End While
cboproveedor.SelectedIndex = 0
rdp.Close()
cmd.CommandText = "select * from products"
listarproducto()
End Sub
Public Sub listarproducto()
rds = cmd.ExecuteReader
lstproducto.Items.Clear()
While rds.Read
lstproducto.Items.Add(rds("productName")).ToString()
End While
rds.Close()
End Sub
Private Sub btnok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnok.Click
cmd.CommandType = CommandType.Text
cmd.CommandText = "select * from products where supplierid=" + cboproveedor.Text
listarproducto()
End Sub
End Class
Ing. Alberto Moreno Cueva
Pgina
1305
Aplicacion empleando Store Procedure (procedimientos almacenados)
Procedimiento almacenados ejecutarlo en el Query Analizador:
a)Pasando dos fechas que muestre las ordenes detalle con su total respectivo
Create Procedure Sp_ConsultaFecha
@FechaIni Varchar(20),
@FechaFin Varchar(20)
As
Select Orders.OrderID,ProductName,[Order Details].UnitPrice as Precio,Quantity as Cantidad,
[Order Details].UnitPrice * Quantity as Subtotal From
[Order Details],Products,Orders where [Order Details].ProductID=Products.ProductID
and Orders.OrderId=[Order Details].OrderID and
OrderDate
Between
Controles empleados:
Controles de
opciones:
RbtOrden y rbtFecha
Y cajas de textos:
Txtfe1 y TxtFe2
Y un datagrid1
Ing. Alberto Moreno Cueva
Pgina
1306
@FechaIni and @FechaFin
Return
b) Psando un orden de pedido que muestre su detalle
Create Procedure Sp_ConsultaOrden
@Orden Int
As
Select Orders.OrderID,ProductName,[Order Details].UnitPrice as Precio,Quantity as Cantidad,
[Order Details].UnitPrice * Quantity as Subtotal From
[Order Details],Products,Orders where [Order Details].ProductID=Products.ProductID
and Orders.OrderId=[Order Details].OrderID and Orders.OrderID=@Orden
Codificacion del Formulario
Imports System.Data.SqlClient
Public Class Ordenes
Public Cn As New SqlConnection("Server=(Local);uid=sa;Database=Northwind")
Public Ds, ds2 As New DataSet()
Public Cmd As New SqlCommand()
Public Da As New SqlDataAdapter()
Dim prm As New SqlParameter()
Private Sub Ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Ok.Click
Dim cmd2 As New SqlCommand()
Dim da2 As New SqlDataAdapter()
Dim prm2 As New SqlParameter()
If rbnOrden.Checked Then
Ing. Alberto Moreno Cueva
Pgina
1307
If Len(txtOrden.Text) = 5 Then
prm.Value = Convert.ToInt32(txtOrden.Text())
Da.SelectCommand = Cmd
Ds.Clear()
Da.Fill(Ds, "Ordenes")
DataGrid1.CaptionText = "Consulta por Ordenes"
DataGrid1.DataSource = Ds.Tables("Ordenes").DefaultView
Else
Ds.Clear()
End If
ElseIf RbnFecha.Checked Then
cmd2.Connection = Cn
cmd2.CommandType = CommandType.StoredProcedure
cmd2.CommandText = "Sp_ConsultaFecha"
'Adiciona los parametros que necesita el procedimiento
prm2 = cmd2.Parameters.Add("@FechaIni", SqlDbType.DateTime)
prm2.Direction = ParameterDirection.Input
prm2.Value = Convert.ToDateTime(txtFe1.Text())
prm2 = cmd2.Parameters.Add("@FechaFin", SqlDbType.DateTime)
prm2.Direction = ParameterDirection.Input
prm2.Value = Convert.ToDateTime(txtfe2.Text())
da2.SelectCommand = cmd2
ds2.Clear()
da2.Fill(ds2, "fechas")
DataGrid1.CaptionText = "Consulta por Fechas"
DataGrid1.Data
Ing. Alberto Moreno Cueva
Pgina
1308
Source = ds2.Tables("fechas").DefaultView
End If
Cn.Close()
End Sub
Private Sub Ordenes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
txtOrden.Clear()
txtFe1.Clear()
txtfe2.Clear()
Cn.Open()
Cmd.Connection = Cn
Cmd.CommandType = CommandType.StoredProcedure
Cmd.CommandText = "Sp_ConsultaOrden"
prm = Cmd.Parameters.Add("@Orden", SqlDbType.Int)
prm.Direction = ParameterDirection.Input
End Sub
Private Sub rbnOrden_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rbnOrden.CheckedChanged
txtOrden.Enabled = True
txtFe1.Enabled = False
txtfe2.Enabled = False
End Sub
Private Sub RbnFecha_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles RbnFecha.CheckedChanged
txtOrden.Enabled = False
txtFe1.Enabled = True
Ing. Alberto Moreno Cueva
Pgina
1309
txtfe2.Enabled = True
End Sub
End Class
Ing. Alberto Moreno Cueva
Pgina
1310
Semana 16 : (Trabajo con Ambiewnte
Desconectado)
La capa desconectada
Una vez que ya se han recuperado los datos desde un origen de datos la conexin a ste ya no es
necesaria. Sin embargo sigue siendo necesario trabajar con los datos obtenidos de una manera
flexible. Es aqu cuando la capa de datos desconectada entra en juego. Adems, en muchas
ocasiones es necesario tratar con datos que no han sido obtenidos desde un origen de datos
relacional con el que se requiera una conexin. A veces nicamente necesitamos un almacn de
datos temporal pero que ofrezca caractersticas avanzadas de gestin y acceso a la informacin.
Finalmente otro motivo por el que es importante el uso de los datos desconectado de su origen es
la transferencia de informacin entre capas de una aplicacin. stas pueden encontrarse
distribuidas por diferentes equipos, e incluso en diferentes lugares del mundo gracias a Internet.
Por ello es necesario disponer de algn modo genrico y eficiente de poder transportar los datos
entre diferentes lugares, utilizarlos en cualquiera de ellos y posteriormente tener la capacidad de
conciliar los cambios realizados sobre ellos con el origen de datos del que proceden. Todo esto y
mucho ms es lo que nos otorga el uso de los objetos DataSet, ncleo central de la capa
desconectada de ADO.NET.
Unin entre capa conectada y desconectada
La clase DataAdapter se ha incluido anteriormente en la capa conectada por que est
implementada por cada proveedor de un modo diferente. En realidad es una clase que pone sus
pies en ambos mundos (conectado y sin conexin) y sirve de nexo entre ellos.
Un DataAdapter sabe omo manejar correctamente los objetos proporcionados por su proveedor
especfico (fundamentalmente los vistos: Connection, Command y DataReader) y proporciona
mtodos para trasegar informacin desde el servidor a DataSets desconectados y viceversa
haciendo uso de dichos objetos especficos del proveedor.
As, por ejemplo, el mtodo Fill de un DataSet se utiliza para introducir los resultados de una
consula dentro de un DataSet para luego trabajar con ellos sin preocuparnos de su origen. Del
mismo modo su mtodo Update se utiliza para conciliar automticamente con el origen de datos
los datos modificados en un DataSet mientras no haba conexin.
Otras clases dependientes de DataSet
Como hemos dicho antes un DataSet podra asimilarse a un pequeo gestor de datos en
memoria. Como tal un DataSet permite mantener diversas tablas as como las relaciones entre
ellas, incluso forzando que se cumplan restricciones de creacin y actualizacin, como en una
Ing. Alberto Moreno Cueva
Pgina
1311
base de datos
"real". Para ello se apoya en el uso de otras clases especializadas que son las siguientes:
DataTable: representa una tabla o relacin de datos. Se puede asimilar a una tabla de un
gestor de datos. Los datos obtenidos de una consulta de tipo SELECT de SQL se
almacenan en un objeto de esta clase.
DataColumn: ofrece informacin sobre cada uno de los campos de los registros
almacenados en un DataTable, como su nombre o su tipo.
DataRow: representa un registro de la tabla virtual definida por el DataTable. Contiene
tantos elementos como campos tiene la tabla, cada uno del tipo definido por el objeto
DataColumn correspondiente.
Constraint: las clases Constraint se emplean para definir resticciones en los tipos de datos
contenidos en un DataTable. Por ejemplo se puede usar un objeto de esta clase para
indicar que un determinado campo debe ser nico o que se trata de una clave externa que
debe ser tenida en cuenta en actualizaciones o borrados en cascada.
DataRelations: define la relacin existente entre dos objetos DataTable. Normalmente se
suelen utilizar un identificador comn a ambas tablas aunque pueden ser combinaciones de
ms de uno de ellos. De este modo se sabe cmo obtener informacin de una tabla a partir
de informacin en otra. Por ejemplo el identificador de una factura (su nmero, por ejemplo)
puede servir para relacionar su registro con los registros de detalle de factura que estn
contenidos en otra tabla.
DataView: representa una vista concreta de un DataTable. Normalmente se trata de
ordenaciones o filtros sobre los datos originales. Todas las tablas disponen de una vista por
dfecto (propiedad DefaultView) que ofrece los datos tal y como se han introducido en sta y
es la vista que se usa habitualmente.
EMPLENADO SQL SERVER
Datatable. DefaultView .- Obtiene una vista personalizada de la tabla que puede incluir una vista
filtrada o una posicin del cursor.
En el ejemplo tambin se muestra el enlace de un control DataGrid.Datasource con un DataTable
Aplicacin .- Lectura aplicando diferentes espacios de trabajo
Ing. Alberto Moreno Cueva
Pgina
1312
Imports System.Data.SqlClient
Imports System.Data.OleDb
Imports System.Data
Public Class frmproducto
Private Sub btnsql_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
btnsql.Click
' es exclusivo para sqlserver
Dim cn As New SqlConnection("uid=sa;pwd=;database=northwind;server=(local)")
' equivale tambien a ==>dim cn as sqlconnection=new sqlconnection("")
Dim objda As New SqlDataAdapter("select * from products", cn)
Dim objds As New DataSet()
objda.Fill(objds, "producto") ' es un nombre que se le asigna en memoria
'dgdproducto.DataSource = objds.Tables("producto").DefaultView
'puede ser con el indice o nombre del dataset en memoria
dgdproducto.DataSource = objds.Tables(0).DefaultView
End Sub
Datagrid con el
nombre
Dgdproducto
Ing. Alberto Moreno Cueva
Pgina
1313
Private Sub btnole_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnole.Click
' se puede conectar para oracle, access,sysbase ,etc.
Dim cn As New OleDbConnection("provider=sqloledb;uid=sa;pwd=;database=northwind;
server=.")
Dim objda As New OleDbDataAdapter("select * from categories", cn)
Dim objds As New DataSet()
objda.Fill(objds, "categories")
dgdproducto.DataSource = objds.Tables(0).DefaultView
End Sub
End Class
ADO.NET - ACCESS
MANTENIMIENTO DE UNA TABLA DE DATOS
Ing. Alberto Moreno Cueva
Pgina
1314
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Const CadSQL As String = "SELECT * FROM PRODUCTOS"
Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data
Source=C:\VENTAS.MDB")
Dim OBJDA As OleDbDataAdapter
Dim OBJDS As New DataSet
Public Sub LISTAR() 'Listar todos los registros de la tabla productos
Dim OBJDS As New DataSet
OBJDA.Fill(OBJDS, "PRODUCTOS")
DataGridView1.DataSource = OBJDS.Tables("PRODUCTOS").DefaultView
End Sub
Public Sub Limpiar()
Mantenimiento a una
Tabla de Base de
Datos, utilizando el
mtodo de acceso
ADO.NET
Procesos de
-ADICION
-CONSULTA
-ACTUALIZACION
Ing. Alberto Moreno Cueva
Pgina
1315
'LIMPIAR CONTROLES
TXTCODIGO.Clear()
TXTDES.Clear()
TXTPRE.Clear()
TXTSTK.Clear()
MskFecha.Text = ""
MskFecha.Mask = "99/99/9999"
RBTNACIONAL.Checked = False
RBTIMPORTADO.Checked = False
End Sub
Public Sub Deshabilitar() 'deshabilitar todos los controles
TXTCODIGO.Enabled = False
TXTDES.Enabled = False
TXTSTK.Enabled = False
TXTPRE.Enabled = False
MskFecha.Enabled = False
btnGUARDAR.Enabled = False
GroupBox1.Enabled = False
End Sub
Public Sub Habilitar() 'habilitar todos los controles
TXTDES.Enabled = True
TXTSTK.Enabled = True
TXTPRE.Enabled = True
MskFecha.Enabled = True
btnGUARDAR.Enabled = True
Ing. Alberto Moreno Cueva
Pgina
1316
GroupBox1.Enabled = True
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Try
OBJDA = New OleDbDataAdapter(CadSQL, Cn)
MessageBox.Show("OK!!!CONEXION CORRECTA", "CONEXION")
Call LISTAR()
Call Limpiar()
Call Deshabilitar()
Catch ex As Exception
MessageBox.Show("ERROR!!! CONEXION INCORRECTA" & ex.Message)
End Try
End Sub
Private Sub btnNUEVO_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnNUEVO.Click
Dim Nr As Integer 'Nmero de Registros
Dim XCOD As String
Call Limpiar()
Call Habilitar()
OBJDA.Fill(OBJDS, "PRODUCTOS")
Nr = OBJDS.Tables(0).DefaultView.Count Cantidad de Registros
If Nr > 0 Then 'SI HAY REGISTROS
XCOD = OBJDS.Tables(0).Rows(Nr - 1).Item(0)
TXTCODIGO.Text = "P" & Format(Val(Mid(XCOD, 2, 3)) + 1, "000")
Else
Ing. Alberto Moreno Cueva
Pgina
1317
TXTCODIGO.Text = "P001"
End If
btnNUEVO.Enabled = False
btnGUARDAR.Enabled = True
TXTDES.Focus()
End Sub
Private Sub btnGUARDAR_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnGUARDAR.Click
Dim Rpta As Byte
Rpta = MessageBox.Show("Seguro de Guardar", "Grabar", _
MessageBoxButtons.YesNo, MessageBoxIcon.Information)
If Rpta = 6 Then
'Grabar el Registro
Dim Cad1 As String
Cad1 = "INSERT INTO PRODUCTOS(Codpro,DesPro,Fecha,PrePro,StkPro,Procede)
VALUES(@Cod,@Des,@Fe,@Pre,@Stk,@Pro)"
Dim Cmd As New OleDbCommand(Cad1)
Cmd.Connection = Cn
Cmd.Parameters.Add("@Cod", OleDbType.Char).Value = TXTCODIGO.Text
Cmd.Parameters.Add("@Des", OleDbType.VarChar).Value = Trim(TXTDES.Text)
Cmd.Parameters.Add("@Fe", OleDbType.Date).Value = CDate(MskFecha.Text)
Cmd.Parameters.Add("@Pre", OleDbType.Double).Value = Val(TXTPRE.Text)
Cmd.Parameters.Add("@Stk", OleDbType.Integer).Value = Val(TXTSTK.Text)
If RBTNACIONAL.Checked = True Then
Cmd.Parameters.Add("@Pro", OleDbType.Char).Value = "N"
Else
Cmd.Parameter
Ing. Alberto Moreno Cueva
Pgina
1318
s.Add("@Pro", OleDbType.Char).Value = "I"
End If
Cn.Open()
Cmd.ExecuteNonQuery()
MessageBox.Show("Registro Ha Sido Grabado", "GRABACION OK")
Call LISTAR()
Cn.Close()
btnGUARDAR.Enabled = False
btnNUEVO.Enabled = True
btnNUEVO.Focus()
End If
End Sub
Private Sub BTNBUSCAR_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BTNBUSCAR.Click
Dim CadBuscar, CODIGO As String
Dim Dt1 As New DataTable
CODIGO = InputBox("INGRESE CODIGO A BUSCAR", "BUSQUEDA")
CadBuscar = "Select * From Productos where CodPro='" & Trim(CODIGO) & "'"
Dim objda As New OleDbDataAdapter(CadBuscar, Cn)
objda.Fill(Dt1)
If Dt1.Rows.Count > 0 Then
TXTC.Text = Dt1.Rows(0)(0).ToString
TXTD.Text = Dt1.Rows(0)(1).ToString
TXTF.Text = Dt1.Rows(0)(2).ToString
TXTP.Text = Dt1.Rows(0)(3).ToString
TXTS.Text = Dt1.Rows(0)(4).ToString
Ing. Alberto Moreno Cueva
Pgina
1319
TXTR.Text = Dt1.Rows(0)(5).ToString
Else
MessageBox.Show("Error!!!Producto no existe", "Error Bsqueda", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
TXTD.Clear() : TXTP.Clear()
TXTC.Clear() : TXTS.Clear()
TXTR.Clear() : TXTF.Clear()
End If
End Sub
Private Sub btnACTUALIZAR_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnACTUALIZAR.Click
Dim Rpta As Integer
Rpta = MessageBox.Show("Seguro de Modificar", "MODIFICAR", _
MessageBoxButtons.YesNo, MessageBoxIcon.Information)
If Rpta = 6 Then
Dim SQL, SQLCAMBIA As String
SQL = "UPDATE PRODUCTOS SET DesPro='" & TXTD.Text & "',Fecha='" &
CDate(TXTF.Text) & "',PrePro='" & Val(TXTP.Text) & "',StkPro='" & Val(TXTS.Text) & "',Procede='"
& TXTR.Text & "'"
SQLCAMBIA = SQL & "WHERE CodPro='" & (TXTC.Text) & "'"
Dim Cmd As New OleDbCommand
Cn.Open()
Cmd.Connection = Cn
Cmd.CommandType = CommandType.Text
Cmd.CommandText = SQLCAMBIA
Cmd.ExecuteNonQuery()
Cmd.Dispose()
Ing. Alberto Moreno Cueva
Pgina
1320
Cn.Close()
MessageBox.Show("Datos Actualizados Correctamente")
Call LISTAR()
End If
End Sub
Private Sub BTNELIMINAR_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BTNELIMINAR.Click
Dim Rpta As Integer
Rpta = MessageBox.Show("Seguro de Eliminar", "MODIFICAR", _
MessageBoxButtons.YesNo, MessageBoxIcon.Error)
If Rpta = 6 Then
Dim SQL As String
SQL = "DELETE FROM PRODUCTOS WHERE CodPro='" & (TXTC.Text) & "'"
Dim Cmd As New OleDbCommand
If Cn.State = ConnectionState.Open Then Cn.Close()
Cn.Open()
Cmd.Connection = Cn
Cmd.CommandType = CommandType.Text
Cmd.CommandText = SQL
Cmd.ExecuteNonQuery()
Cmd.Dispose()
Cn.Close()
MessageBox.Show("Registro Eliminado Correctamente")
Call LISTAR()
TXTD.Clear() : TXTC.Clear()
TXTR.Clear() : TXTS.Clear()
Ing. Alberto Moreno Cueva
Pgina
1321
TXTP.Clear() : TXTF.Clear()
End If
End Sub
Private Sub btnSALIR_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSALIR.Click
Me.Close()
Cn.Close()
End Sub
End Class
Ing. Alberto Moreno Cueva
Pgina
1322
Semana 17 : (Uso de DataTable y DataView)
Aplicacin de un sistema de notas.-
La base de Dato a emplear UNIVERSIDAD:
A nivel modulo:
VariablesGlobales
Imports System.Data.SqlClient
Module VariablesGlobales
Public Cn As SqlConnection
Public MiFila As DataRow
Dim objDSAlumnos As DataSet
End Module
Ing. Alberto Moreno Cueva
Pgina
1323
FrmLogin
Imports System.Data.SqlClient
Public Class frmLogin
Const strCn As String = "Data Source=(local);Initial Catalog=bdMatricula"
Private Sub btnAceptar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
btnAceptar.Click
Try
Dim MiCn As String = strCn & ";User Id=" & txtUserName.Text & _
";Password=" & txtPassword.Text
Cn = New SqlConnection(MiCn)
Cn.Open()
Me.Hide()
Dim MiForm As New frmPrincipal()
MiForm.Show()
Catch ex1 As SqlException
Select Case ex1.Number
Case 17
MsgBox("Servidor no reconocido")
Case 156, 170
MsgBox("Sente
Los objetos de tipo texto
TxtUsrname
Ing. Alberto Moreno Cueva
Pgina
1324
ncia Incorrecta")
Case 4060
MsgBox("Base de Datos incorrecta")
Case 18456
MsgBox("Usuario o Password incorrecto")
Case Else
MsgBox(ex1.Message)
End Select
txtUserName.Text = "" : txtPassword.Text = "" : txtUserName.Focus()
End Try
End Sub
Private Sub btnCancelar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
btnCancelar.Click
Cn.Close()
Cn = Nothing
End
End Sub
Private Sub frmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
End Sub
End Class
El Formulario Menu FrmPrincipal
Insertar el control menu
Menu1
Ing. Alberto Moreno Cueva
Pgina
1325
Public Class frmPrincipal
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MenuItem2.Click 'Para mantenieminto de la
Dim ManteAlumnos As New frmManteAlumnos() 'tabla alumnos
ManteAlumnos.MdiParent = Me
ManteAlumnos.Show()
End Sub
Private Sub MenuItem8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MenuItem8.Click
Cn.Close() 'Para salir
Cn = Nothing
End
End Sub
Private Sub frmPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
End Sub
Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MenuItem3.Click
End Sub
Private Sub MenuItem12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MenuItem12.Click
Dim Mantetrans As New frmTRanscript()
Mantetrans.MdiParent = Me
Ing. Alberto Moreno Cueva
Pgina
1326
Mantetrans.Show()
End Sub
Private Sub MenuItem10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MenuItem10.Click
Dim frmNota As New frmconsultaNotas() 'Para consultas de Notas
frmNota.MdiParent = Me
frmNota.Show()
End Sub
Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MenuItem4.Click
Dim frmcur As New FRMCURSO() 'Mantenimiento de la tabla Curso
frmcur.MdiParent = Me
frmcur.Show()
End Sub
End Class
FrmCurso
Ing. Alberto Moreno Cueva
Pgina
1327
Imports System.Data.SqlClient
Public Class FRMcURSO
Const strSQL As String = "Select * From curso"
Dim objDA As SqlDataAdapter
Dim objDS As New DataSet()
Dim objDV As New DataView()
Dim objCM As SqlCommandBuilder
Dim fila As DataRow
Dim nr, indice As Integer
Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnNuevo.Click
Dim x As Control
Dim codc As String
Dim canreg As Integer
For Each x In Me.Controls
If TypeOf x Is TextBox Then x.Text = ""
Ing. Alberto Moreno Cueva
Pgina
1328
Next
canreg = objDS.Tables(0).DefaultView.Count
If canreg > 0 Then
codc = objDS.Tables(0).Rows(nr - 1).Item(0)
codc = "C" + Format(Val(codc.Substring(1, 3)) + 1, "000")
Else
codc = "C001"
End If
txtcod.Text = codc
txtnom.Focus()
End Sub
Sub muestra(ByVal nro As Integer)
fila = objDS.Tables("curso").Rows(nro)
txtcod.Text = fila.Item(0)
txtnom.Text = fila.Item(1)
txthr.Text = fila.Item(2)
End Sub
Sub asigna()
fila.Item(0) = txtcod.Text
fila.Item(1) = txtnom.Text
fila.Item(2) = txthr.Text
End Sub
Private Sub FRMcURSO_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Try
objDA = New SqlDataAdapter(strSQL, Cn)
Ing. Alberto Moreno Cueva
Pgina
1329
objCM = New SqlCommandBuilder(objDA)
objDA.Fill(objDS, "Curso")
objDV = objDS.Tables("Curso").DefaultView
objDV.AllowNew = True
objDV.AllowEdit = True
objDV.AllowDelete = True
DgCurso.DataSource = objDV
nr = objDS.Tables(0).DefaultView.Count
indice = 0
If nr > 0 Then
selecciona(btnPri)
End If
Catch ex1 As SqlException
MsgBox(ex1.Message)
End Try
End Sub
Private Sub BtnAnula_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles BtnAnula.Click
If indice >= 0 Then
objDV.Delete(indice)
objDA.Update(objDS.Tables("curso"))
nr = objDS.Tables(0).DefaultView.Count
selecciona(btnPri)
End If
End Sub
Sub selecciona(ByVal btn As Button)
Ing. Alberto Moreno Cueva
Pgina
1330
Dim totr As Integer = nr - 1
If btn Is btnPri Then
indice = 0
ElseIf btn Is btnSig Then
indice += 1
If indice > totr Then indice = totr
ElseIf btn Is BtnAnt Then
indice -= 1
If indice < 0 Then indice = 0
Else
indice = totr
End If
muestra(indice)
txtreg.Text = (indice + 1).ToString & "/" & nr
End Sub
Private Sub handleClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnPri.Click, btnSig.Click, BtnAnt.Click, BtnUlt.Click
selecciona(CType(sender, Button))
End Sub
Private Sub BtnGraba_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles BtnGraba.Click
Dim sql As String
Dim codc As String
fila = objDS.Tables(0).NewRow
asigna()
Ing. Alberto Moreno Cueva
Pgina
1331
objDS.Tables(0).Rows.Add(fila)
objDA.Update(objDS.Tables("curso"))
nr = objDS.Tables(0).DefaultView.Count
selecciona(BtnUlt)
End Sub
End Class
Para el formulario de Consulta de Notas
Empleando filtros , ingresando los primeros carecteres del apellido que muestre todos los alumnos
que tengan esa coincidencia , y al hacer un clic en un alumno mostrar todos los cursos que ha
llevado el alumno con su promedio respectivo.
FrmConsultaNotas
Ing. Alberto Moreno Cueva
Pgina
1332
Imports System.Data.SqlClient
Public Class frmconsultaNotas
Const strSQL As String = "Select * From Alumno"
Dim objDA, da As SqlDataAdapter
Dim objDS, ds As New DataSet()
Dim objDV, objdv2 As New DataView()
'Dim objCM As SqlCommandBuilder
Dim xfila As DataRow
Private Sub frmconsultaNotas_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Try
objDA = New SqlDataAdapter(strSQL, Cn)
objDA.Fill(objDS, "Alumno")
objDV = objDS.Tables("Alumno").DefaultView
objDV.AllowNew = False
objDV.AllowEdit = False
objDV.AllowDelete = False
DGAlumno.DataSource = objDS.Tables(0).DefaultView
Catch ex1 As SqlException
MsgBox(ex1.Message)
End Try
End Sub
Private Sub DGAlumno_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles
DGAlumno.Click
Dim NroFila As Integer
Dim sql As String
Ing. Alberto Moreno Cueva
Pgina
1333
Dim nf, nfila As Integer
Dim sm, promedio, pro As Single
NroFila = DGAlumno.CurrentRowIndex
xfila = objDS.Tables("Alumno").Rows(NroFila)
sql = "select C.codcur,asignatura=nomcur,ep,ef,promedio=(ep+2*ef)/3 "
sql += "from notas n inner join curso c on c.codcur=n.codcur "
sql += "where codalu='" & xfila.Item(0) & "'"
da = New SqlDataAdapter(sql, Cn)
ds.Clear()
da.Fill(ds, "notas")
DgNota.DataSource = ds.Tables(0).DefaultView
nf = ds.Tables(0).DefaultView.Count
sm = 0
If nf > 0 Then
For nfila = 0 To nf - 1
sm += ds.Tables(0).Rows(nfila).Item(4)
Next
promedio = Math.Round(sm / nf, 0)
Else
promedio = 0
End If
LBLProm.Text = Format(promedio, "00")
End Sub
Private Sub DGAlumno_KeyUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles DGAlumno.KeyUp
If e.KeyCode = Keys.Down Or e.KeyCode = Keys.Up Then
Ing. Alberto Moreno Cueva
Pgina
1334
DGAlumno_Click(sender, e)
End If
End Sub
Private Sub txtnom_TextChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles txtnom.TextChanged
Dim sql As String
'primera forma
'sql = "select * from alumno where apenom like '" + Trim(txtnom.Text) + "%'"
'objDA = New SqlDataAdapter(sql, Cn)
'objDS.Clear()
'objDA.Fill(objDS, "Alumno")
'objDV = objDS.Tables("Alumno").DefaultView
'DGAlumno.DataSource = objDS.Tables(0).DefaultView
'Segunda Forma utilizando filtros
If Len(txtnom.Text) > 0 Then
objDV.RowFilter = "apenom like '" & Trim(txtnom.Text) & "%'"
objDV.RowStateFilter = DataViewRowState.CurrentRows
Else
objDV.RowFilter = Nothing
objDV.RowStateFilter = DataViewRowState.OriginalRows
End If
End Sub
End Class
OTRAS APLICACIONES
Ing. Alberto Moreno Cueva
Pgina
1335
APLICACIN 3:
Realizar un aplicacin el nos permita consultar las facturas por medio de un rango de fechas.
Form3.vb
CODIGO FUENTE:
Imports System.Data.OleDb
Public Class Form3
Ing. Alberto Moreno Cueva
Pgina
1336
Dim OleDbCn As New OleDbConnection("Provider=Microsoft.jet.OleDb.4.0;Data
Source=i:\ventas.mdb")
Dim ds As New DataSet
Dim dv As DataView
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim da As New OleDbDataAdapter("Select Num_Fact,Sub_Total,Igv,Total,Fecha From
Facturas", OleDbCn)
da.Fill(ds, "Facturas")
DataGrid1.DataSource = ds.Tables("Facturas")
lblTotal.Text = ds.Tables("Facturas").Rows.Count
txtfecinicial.Text = ""
txtfecFinal.Text = ""
End Sub
Private Sub Form3_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles
MyBase.Activated
txtfecinicial.Focus()
End Sub
Private Sub CmdConsultar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CmdConsultar.Click
'Validando el ingreso de fechas IsDate(Expresin)
If txtfecinicial.Text = "" Or Not IsDate(txtfecinicial.Text) Then
MessageBox.Show("Validando el Ingreso de Fecha Inicial", "Validacion Fechas")
Exit Sub
End If
If txtfecFinal.Text = "" Or Not IsDate(txtfecFinal.Text) Then
MessageBox.Show("Validando el Ingreso de la Fecha Final", "Validacion de Fechas")
Exit Sub
Ing. Alberto Moreno Cueva
Pgina
1337
End If
'Inicar el proceso de consulta filtrando los datos por medio del objeto DataView
dv = New DataView(ds.Tables("Facturas"))
Dim str As String = "Fecha >='" & txtfecinicial.Text & "' and Fecha <='" & txtfecFinal.Text & "'"
dv.RowFilter = str
DataGrid1.DataSource = dv
End Sub
Private Sub Cmdnuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdMostrar.Click
txtfecinicial.Text = "" : txtfecFinal.Clear()
dv.RowFilter = Nothing
DataGrid1.DataSource = dv
End Sub
Private Sub CmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdSalir.Click
If MessageBox.Show("Desea Salir", "Consultas entre Fechas", 4, 32) = 6 Then
Application.Exit()
End If
End Sub
End Class
Resultado:
Ing. Alberto Moreno Cueva
Pgina
1338
APLICACION 4:
Mantenimiento de Registros de Alumnos.
Creara una Tabla llamada alumnos en una base de datos en Access llamada ventas.mdb.
Tendr la siguiente estructura.
Registros:
Diseo del Formulario:
Ing. Alberto Moreno Cueva
Pgina
1339
CODIGO FUENTE:
Imports System.Data.OleDb
Imports vb = Microsoft.VisualBasic
Public Class Form4
Inherits System.Windows.Forms.Form
Dim OleDb As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data
Source=i:\ventas.mdb")
Dim da As OleDbDataAdapter
Dim ds As New DataSet
Dim Iposicion As Integer
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim cmd As New OleDbCommand
cmd.Connection = OleDb
cmd.CommandType = CommandType.TableDirect
Ing. Alberto Moreno Cueva
Pgina
1340
cmd.CommandText = "Alumnos"
da = New OleDbDataAdapter(cmd)
Dim CmdBuilder As New OleDbCommandBuilder(da)
da.Fill(ds, "Alumnos")
Iposicion = 0
Call limpiar()
txtcodigo.Enabled = False
End Sub
Sub limpiar()
Dim obj As Object
For Each obj In Me.Controls
If TypeOf obj Is TextBox Then obj.text = ""
Next
End Sub
Sub cargardatos()
Dim dr As DataRow
dr = ds.Tables("Alumnos").Rows(Iposicion)
txtcodigo.Text = dr("Alu_cod")
txtnombre.Text = dr("Alu_nom")
txtdireccion.Text = dr("Alu_direccion")
txtfecha.Text = dr("Alu_fecha")
If dr("Alu_sexo") = True Then
OptM.Checked = True
OptF.Checked = False
Else
Ing. Alberto Moreno Cueva
Pgina
1341
OptM.Checked = False
OptF.Checked = True
End If
End Sub
Private Sub CmdNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdNuevo.Click
Call limpiar()
Iposicion = ds.Tables("Alumnos").Rows.Count - 1
Dim dr As DataRow = ds.Tables("Alumnos").Rows(Iposicion)
Dim maxcodigo As String = dr("Alu_cod") 'Generando el Codigo apartir del ultmo codigo del
Cliente.
Dim CodigoAlumno As String = IIf(IsDBNull(maxcodigo), "A0000", maxcodigo)
txtcodigo.Text = "A" + vb.Right("0000" + LTrim(vb.Right(CodigoAlumno, 4) + 1), 4)
txtnombre.Focus()
End Sub
Private Sub CmdPrimero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdPrimero.Click
Iposicion = 0
Me.cargardatos()
End Sub
Private Sub CmdAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdAnterior.Click
If Iposicion = 0 Then
MessageBox.Show("Primer registro", "Navegador de Registros")
Else
Iposicion -= 1
Me.cargardatos()
End If
Ing. Alberto Moreno Cueva
Pgina
1342
End Sub
Private Sub CmdUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdUltimo.Click
Iposicion = ds.Tables("Alumnos").Rows.Count - 1
Me.cargardatos()
End Sub
Private Sub CmdSiguiente_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CmdSiguiente.Click
If Iposicion = ds.Tables("Alumnos").Rows.Count - 1 Then
MessageBox.Show("Ultimo registro", "Navegador de Registros")
Else
Iposicion += 1
Me.cargardatos()
End If
End Sub
Private Sub CmdAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdAgregar.Click
Dim dr As DataRow
dr = ds.Tables("Alumnos").NewRow()
dr("Alu_cod") = txtcodigo.Text
dr("Alu_nom") = txtnombre.Text
dr("Alu_direccion") = txtdireccion.Text
dr("Alu_fecha") = txtfecha.Text
If OptM.Checked Then
dr("Alu_sexo") = True
Else
Ing. Alberto Moreno Cueva
Pgina
1343
dr("Alu_sexo") = False
End If
ds.Tables("Alumnos").Rows.Add(dr)
da.Update(ds, "Alumnos")
End Sub
Private Sub CmdActualizar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CmdActualizar.Click
Dim dr As DataRow
dr = ds.Tables("Alumnos").Rows(Iposicion)
dr("Alu_nom") = txtnombre.Text
dr("Alu_direccion") = txtdireccion.Text
dr("Alu_fecha") = txtfecha.Text
If OptM.Checked Then
dr("Alu_sexo") = True
Else
dr("Alu_sexo") = False
End If
da.Update(ds, "Alumnos")
End Sub
Private Sub CmdEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdEliminar.Click
Dim dr As DataRow
dr = ds.Tables("Alumnos").Rows(Iposicion)
dr.Delete()
Dim TblDelete As DataTable
TblDelete = ds.Tables("Alumnos").GetChanges(DataRowState.Deleted)
Ing. Alberto Moreno Cueva
Pgina
1344
da.Update(TblDelete)
ds.Tables("Alumnos").AcceptChanges()
CmdPrimero.PerformClick()
End Sub
Private Sub CmdBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdBuscar.Click
Dim cadena As String
cadena = InputBox("Ingrese el Codigo del alumno a buscar", "Busqueda de Alumnos", "")
If cadena = "" Then
MessageBox.Show("No ingreso el Codigo del Alumno", "Busqueda de Alumnos")
Exit Sub
End If
Dim dv As New DataView(ds.Tables("Alumnos"))
dv.RowFilter = "Alu_cod='" & cadena & "'"
txtcodigo.Text = dv(0)("Alu_cod")
txtnombre.Text = dv(0)("Alu_nom")
txtdireccion.Text = dv(0)("Alu_direccion")
txtfecha.Text = dv(0)("Alu_fecha")
If dv(0)("Alu_sexo") = True Then
OptM.Checked = True
OptF.Checked = False
Else
OptM.Checked = False
OptF.Checked = True
End If
End Sub
Ing. Alberto Moreno Cueva
Pgina
1345
Private Sub CmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdSalir.Click
If MessageBox.Show("Desea Salir", "Mantenimiento de Alumnos", 4, 32) = 6 Then
Application.Exit()
End If
End Sub
End Class
Resultado:
APLICACIONES CON LISTBOX Y COMBOBOX
APLICACION 5:
Para desarrollar esta aplicacion necesitara conocer las siguientes tablas Facturas Detalle
Producto
Para realizar esta aplicacin usaremos los controles comboBox1 y listBox1 enlazados a
datos, debido a que estos controles poseen las mismas propiedades para trabajar con
datos describiremos las siguientes propiedades:
DataSource => Obtiene o establece el origen de datos de este objeto. Existen 2 formas para
rellenar los controles ComboBox1 y ListBox1.
DisplayMember => Obtiene o establece una cadena que especifica la propiedad del origen de
datos cuyo
Ing. Alberto Moreno Cueva
Pgina
1346
contenido se desea mostrar.
ValueMember => Obtiene o establece una cadena que especifica la propiedad del origen de datos
a partir de la cual se va dibujar el valor.
SelectedValue => Obtiene o establece el valor de la propiedad miembro especificado por la
propiedad ValueMember.
FACTURAS:
DETALLE
PRODUCTO
Ing. Alberto Moreno Cueva
Pgina
1347
Form4.vb [Diseo del Formulario]
Propiedades de los controles del Formulario:
DataGrid1
Name = DataGrid1
CaptionText = DETALLE DE FACTURAS
Combobox1
Name = ComboBox1
Text = ComboBox1
ListBox1
Button1
Name =CmdFinalizar
Text =&Finalizar
Label1
Name=lblTotal
Text =lblTotal
Label2
Name =lblTotalDetalle
Ing. Alberto Moreno Cueva
Pgina
1348
Name = ListBox1
CODIGO FUENTE:
Imports System.Data.OleDb
Public Class Form6
Dim OleDbCn As New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data
Source=i:\ventas.mdb")
Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim da As New OleDbDataAdapter("Select Cod_Cli,Nom_Cli From Clientes", OleDbCn)
Dim ds As New DataSet
da.Fill(ds, "Clientes") 'Almacenamos la tabla Clientes al DataSet.
ComboBox1.DataSource = ds.Tables("Clientes")
ComboBox1.DisplayMember = "Nom_Cli"
ComboBox1.ValueMember = "Cod_Cli"
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
Dim CodCliente As String = ComboBox1.SelectedValue
Dim strSQL As String
strSQl = "Select Num_Fact From Facturas Where Cod_Cli='" & CodCliente & "'"
Dim da As New OleDbDataAdapter(strSQl, OleDbCn)
Dim ds As New DataSet
da.Fill(ds, "Facturas")
ListBox1.DataSource = ds.Tables("Facturas")
ListBox1.Displa
Ing. Alberto Moreno Cueva
Pgina
1349
yMember = "Num_Fact"
ListBox1.ValueMember = "Num_Fact"
lbltotal.Text = ListBox1.Items.Count 'Cuenta el total de elementos
Catch ex As Exception
End Try
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ListBox1.SelectedIndexChanged
Try
Dim CodFacturas As String = ListBox1.SelectedValue 'Obtiene el dato del campo
enlazado.
Dim strSQL As String 'Realizando una consulta de 2 tablas.
strSQL = "Select Descrip,Producto.Precio,Cant,(Producto.Precio * Cant) as Total From
Producto,Detalle " & _
" Where Producto.Cod_Prod=Detalle.Cod_Prod and Num_Fact='" & CodFacturas &
"'"
Dim da As New OleDbDataAdapter(strSQL, OleDbCn)
Dim ds As New DataSet
da.Fill(ds, "Detalle")
DataGrid1.DataSource = ds.Tables("Detalle")
'Calcula la expresion dada de la filas actuales que cumplen los criterios de filtro.
'Ejemplo Compute("Sum(Total),Total > 20) => solo muestra la suma del campo Total que
cumplen con el criterio.
lblTotalDetalle.Text = ds.Tables("Detalle").Compute("Sum(Total)", "")
FormatoGrid()
Catch ex As Exception
End Try
End Sub
Ing. Alberto Moreno Cueva
Pgina
1350
Sub FormatoGrid()
DataGrid1.TableStyles.Clear()
Dim dts As New DataGridTableStyle
dts.MappingName = "Detalle"
dts.ReadOnly = True
dts.BackColor = Color.Yellow
dts.ForeColor = Color.Blue
dts.AllowSorting = True
Dim c1 As New DataGridTextBoxColumn
c1.MappingName = "Descrip"
c1.HeaderText = "Producto"
c1.Width = 120
dts.GridColumnStyles.Add(c1)
Dim c2 As New DataGridTextBoxColumn
c2.MappingName = "Precio"
c2.HeaderText = "Precio"
c2.Format = "c"
c2.Width = 50
dts.GridColumnStyles.Add(c2)
Dim c3 As New DataGridTextBoxColumn
c3.MappingName = "Cant"
c3.HeaderText = "Cantidad"
c3.Width = 50
dts.GridColumnStyles.Add(c3)
Dim c4 As New DataGridTextBoxColumn
Ing. Alberto Moreno Cueva
Pgina
1351
c4.MappingName = "Total"
c4.HeaderText = "Total"
c4.Format = "c"
c4.Width = 70
dts.GridColumnStyles.Add(c4)
DataGrid1.TableStyles.Add(dts)
End Sub
Private Sub CmdFinalizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles CmdFinalizar.Click
If MessageBox.Show("Desea Salir", "Consultas Datos", 4, 32) = 6 Then
Application.Exit()
End If
End Sub
End Class
Resultado:
Ing. Alberto Moreno Cueva
Pgina
1352
Ejercicios con BDD
Desarrollar los siguientes formularios:
1.- Consulta de Notas
Ing. Alberto Moreno Cueva
Pgina
1353
2.- Consulta de alumnos por curso
3.- Consulta En Cascada Alumnos con sus cursos llevados
Ing. Alberto Moreno Cueva
Pgina
1354
5.- Consulta en Cascada
a) Al seleccionar el nombre del curso , no necesita escribir todo el nombre completo ,
mostrara en el grid el codigo , nombre del alumo y su promedio respectivo que llevaron
dicho curso
b) Muestra a todos los alumnos que comienzan con dicho caracteres
c) Al seleccionar la especialidad Se activara el combo para elegir una especialidad y mostrara
en el grid todos los alumnos que estan en dicha especialidad.
Ing. Alberto Moreno Cueva
Pgina
1355
La Base de datos se Llama BD Matricula
Propuesto nro 2.-
Tabla: CLIENTES Tabla: CUENTAS Tabla: MOVIMIENTOS
BDBANCO
Ing. Alberto Moreno Cueva
Pgina
1356
I.- FORMULARIO N 1:
ESPECIFICACIONES
En el ListBox1 Clientes se mostrarn todos clientes de la tabla CLIENTES.
Al elegir un Cliente del ListBox1 se deber mostrar en el listbox2 de cuentas, slo las cuentas
asignadas al cliente, seleccionado de la tabla CUENTAS.
Seleccionando el nmero de cuenta del ListBox2 Cuentas listar en el DataGridView el
movimiento de saldos de esa cuenta de la tabla MOVIMIENTOS ; a la vez
Seleccionando el nmero de cuenta del Listbox2 Cuentas, mostrar en la etiqueta lbltipo el
tipo de cuenta, en el label saldo anterior nos mostrar el ltimo saldo de la tabla CUENTAS,
debemos ingresar el nmero de movimiento, seleccionar un tipo de movimiento (Depsito o
Retiro) e ingresar un valor numrico que representa el importe de la operacin, el cual
calcular el nuevo saldo automticamente.
Nota: Si es Depsito aumenta el saldo, si es Retiro disminuye el Saldo.
El botn Grabar registra los datos en la tabla MOVIMIENTOS
Nota: El nmero de Cuenta a Grabar obtenerlo del Listbox2 de la propiedad SelectedValue.
El botn Reporte muestra en el formulario frmReporte un informe en Crystal Reports de todos
los registros de la tabla MOVIMIENTOS.
El botn Salir finaliza el proyecto.
Ing. Alberto Moreno Cueva
Pgina
1357
Semana 18 : (Creacion de Reportes)
Crystal Reports se conecta a bases de datos mediante controladores de bases de datos. Cada
controlador se escribe para controlar un tipo de base de datos especfico o la tecnologa de
acceso a bases de datos.
Modelos de extraccin e insercin
Con el fin de ofrecer el acceso a datos ms flexible para los programadores, los controladores de
base de datos de Crystal Reports se han diseado para proporcionar un modelo de extraccin e
insercin de acceso a datos.
Modelo de extraccin
En un modelo de extraccin, el controlador se conectar a la base de datos y extraer datos
cuando se necesiten. Con este modelo, Crystal Reports controla tanto la conexin a la base de
datos como el comando SQL que se ejecuta para obtener los datos y no necesita ninguna
codificacin del programador. Si no se escribe ningn cdigo especial en tiempo de ejecucin, se
utiliza el modelo de extraccin.
Modelo de insercin
En comparacin, el modelo de insercin necesita que el programador escriba cdigo para
conectarse a la base de datos, ejecutando un comando SQL para crear un conjunto de registros o
de datos que se ajusten a los campos del informe y enviando ese objeto al informe. Este mtodo
le permite crear recursos compartidos de conexin en la aplicacin y filtrar los datos antes de que
Crystal Reports los reciba.
Los controladores de bases de datos se utilizan durante el tiempo de creacin y de procesamiento.
Durante el tiempo de creacin, el controlador de la base de datos se utiliza para identificar el
esquema de los datos. Con los controladores OLEDB, ODBC y Access/Excel, este proceso implica
la conexin a una base de datos y la seleccin de las tablas, vistas o procedimientos almacenados
para especificar el esquema. Con los controladores ADO.NET y de definicin de campos, este
proceso implica la seleccin de un esquema con la forma de un archivo XML (*.xml) o de un
Ing. Alberto Moreno Cueva
Pgina
1358
archivo de definicin de datos (*.ttx).
Durante el tiempo de procesamiento, el informe utilizar el mismo controlador de base de datos
utilizado para crear el informe. No obstante, si los datos se insertan en el informe, el informe
seleccionar el controlador adecuado para controlar el conjunto de registros o el conjunto de
datos.
Controladores de bases de datos con Crystal Reports para Visual Studio .NET
Controlador de base
de datos
Base de datos a las que se tiene
acceso
Mtodo de acceso a datos
OLEDB Cualquier base de datos que
tenga un proveedor OLEDB.
Admite tanto la extraccin de datos
de la base de datos como la
insercin de datos en el informe de
un conjunto de registros ADO.
ODBC Cualquier base de datos que
tenga un proveedor ODBC.
Admite tanto la extraccin de datos
de la base de datos como la
insercin de datos en el informe de
un conjunto de registros RDO.
Access/Excel Bases de datos de Microsoft
Access y libros de Microsoft
Excel.
Admite tanto la extraccin de datos
de la base de datos como la
insercin de datos en el informe de
un conjunto de registros DAO.
ADO.NET Cualquier base de datos con un
proveedor gestionado.
Admite la insercin de datos en el
informe desde un conjunto de
datos ADO.NET.
Este controlador no extraer datos
por s mismo.
Definicin de campo Ninguna.
Este controlador especial se
utiliza para crear informes
basados nicamente en un
esquema sin datos reales.
El controlador se incluye
principalmente para la
compatibilidad con versiones
anteriores y slo se utiliza durante
el proceso de creacin de
informes.
En tiempo de ejecucin, debe
enviarse un conjunto de registros o
un conjunto de datos a un informe
creado con el controlador.
Ing. Alberto Moreno Cueva
Pgina
1359
Objeto de datos
Crystal (CDO)
Ninguna.
Este controlador especial obtiene
acceso a datos que no residen en
una base de datos tradicional.
Este controlador se incluye
principalmente para la
compatibilidad con versiones
anteriores.
Este controlador slo admite la
insercin de datos en un informe
desde un conjunto de registros
CDO; no extraer datos por s
mismo. Utilice la biblioteca de
objetos de datos Crystal para llenar
un conjunto de registros CDO.
Nota Este
controlador no est
disponible durante el
perodo de creacin
del informe.
Seleccione uno de los
controladores
disponibles para
crearlo.
REPORTES EN .NET CON CRYSTAL REPORTS
Visual Studio .NET incluye Crystal Reports como un mecanismo "oficial" de creacin de reportes.
Crystal Reports es un producto muy desarrollado y complejo para la creacin de reportes, y cuenta
con una infinidad de opciones. En este artculo, nos vamos a concentrar en crear reportes
relativamente sencillos, pero mostrando los detalles especficos de la versin .NET, tanto en
aplicaciones WinForms como en aplicaciones WebForms (ASP.NET). Este artculo considera que
usted ya posee alguna familiaridad con Visual Studio .NET y tambin con ADO.NET.
Crear un reporte
Independientemente de cmo se har la presentacin, el reporte se define en un archivo ".RPT",
que forma parte de su proyecto. Ese archivo especifica el modo en que se har la presentacin del
reporte, pero no incluye los datos propiamente dichos. Los datos se definirn en el tiempo de
ejecucin.
Crystal Reports se basa en un concepto muy comn de la definicin de reportes: los reportes se
componen de "secciones", y cada seccin es un espacio horizontal en la pgina. Existen diversos
tipos de secciones, por ejemplo:
Encabez
ado del
Ing. Alberto Moreno Cueva
Pgina
1360
reporte, aparece en la primera pgina.
Encabezado de pgina, aparece en la parte superior de todas las pginas.
Detalle: lo ms importante. En el tiempo de ejecucin, se genera una de estas secciones
para cada lnea (registro) en la base de datos.
Pie de pgina, aparece en la parte inferior de todas las pginas.
Pie de reporte, aparece al final del reporte.
En un principio, todos los reportes presentan estas cinco secciones. Otras secciones son
opcionales, como por ejemplo:
Encabezado de grupo, aparece antes de un grupo.
Pie de grupo, aparece al final del grupo.
Se podr omitir una o ms secciones, en caso de que no sean necesarias.
Acceder a la base de datos
Antes de crear el reporte, hay que decidir cul ser el mecanismo utilizado para acceder a la base
de datos. Crystal Reports puede obtener datos de una infinidad de fuentes, pero una buena
cantidad de ellas, como DAO, ADO y OLE/DB, no est "administrada", o sea, es cdigo .NET
"puro". En una aplicacin .NET, probablemente sea deseable realizar el acceso a travs de
ADO.NET. Para ello, lo ms fcil es definir un Conjunto de datos tipificado, aun antes de crear el
reporte.
Crear un proyecto
Veamos cmo crear un reporte en un programa WinForms. Inicialmente, genere un proyecto en
VB de tipo "Windows Application".
Vamos a definir ahora el acceso a la base de datos. Como ejemplo, vamos a acceder a la base de
datos "Northwind", que se encuentra como ejemplo en SQL Server. Siga la siguiente ruta:
Agregue un componente de tipo SqlDataAdapter.
Seleccione la conexin con la base Northwind.
Introduzca el comando SQL "select * from Products order by CategoryID, ProductName"
Haga clic con el botn alterno del mouse sobre el componente DataAdapter, seleccione
"Create DataSet" y acepte el nombre sugerido ("DataSet1").
Ahora, agregaremos un reporte al proyecto. Haga clic en "Proyecto | Agregar elemento nuevo" y
seleccione "Crystal Report":
Ing. Alberto Moreno Cueva
Pgina
1361
Acepte el nombre "CrystalReport1.rtp", al presionar Intro. Crystal Reports mostrar un asistente.
Marque "Usar el Experto en reportes" y "Estndar":
En este momento, cabe hacer algunos comentarios:
Ing. Alberto Moreno Cueva
Pgina
1362
El asistente puede ayudarle a crear diversos tipos de reportes, pero vamos a explorar
solamente algunas posibilidades ms sencillas. Puede probar despus con otros tipos de
reportes;
Crystal Reports pedir que realice el registro de su copia; mostramos el uso con una copia
ya registrada.
Presione "Aceptar" para pasar a la pantalla siguiente para la eleccin de la fuente de los datos.
Seleccione la tabla "Productos" a partir del Conjunto de datos creado y haga clic en "Insertar
tabla":
Haga clic en "Siguiente" y seleccione las columnas que aparecern en el reporte:
Ing. Alberto Moreno Cueva
Pgina
1363
Haga clic en "Siguiente" y defina un grupo haciendo clic en la columna "CategoryID" al lado
izquierdo, y despus en "Agregar":
Las dems opciones no nos interesan en este reporte sencillo. Haga clic en "Finalizar", para crear
el reporte:
Ing. Alberto Moreno Cueva
Pgina
1364
Observe lo siguiente:
El reporte tiene siete secciones; las cinco obligatorias y dos ms relativas al grupo.
La seccin "Encabezado del reporte" tiene la propiedad Suprimir con el valor verdadero,
indicando que no aparecer en el tiempo de ejecucin.
Puede editar cuantas veces quiera el reporte creado, al agregar componentes o modificar
los que hayan sido colocados.
Las secciones contienen componentes que se pueden obtener en dos lugares:
Pgina "Crystal Reports" de la Caja de herramientas, si se trata de textos fijos, lneas y
cajas.
"Explorador de campos", en el caso de campos de la base de datos, frmulas, totales,
grupos y otros datos especficos del reporte, como fecha, hora y numeracin de pginas.
Presentar el reporte
Una vez definido el reporte, hay que presentarlo al tiempo de ejecucin. Para ello, coloque un
componente "CrystalReportViewer" en el formato y seleccione la propiedad "Acoplar" para
"Llenar". Slo se necesita un componente "Visualizador", aun cuando se hayan creado diversos
reportes en archivos RPT separados.
Para producir el reporte, agregue un componente "Men principal" y aada un elemento de men
para producir el reporte. Aada el siguiente cdigo al evento Clic del botn:
private sub menuItem2_Click(byval sender as Object, byval e as System.EventArgs)
' Ejecuta la consulta a la base dados
sqlDataAdapter1.Fill(dataSet11)
' Crea el reporte
Dim Rel as new CrystalReport1()
' Asocia el conjunto de datos con el reporte
Rel.SetDataSource(dataSet11)
' Asocia el reporte con el Visualizador
crystalReportViewer1.ReportSource = Rel
End sub
Una vez presentado, puede cambiar el tamao en el botn "aumentar", ir a otra pgina o hacer clic
del lado
izquierdo para
Ing. Alberto Moreno Cueva
Pgina
1365
solicitar la presentacin de algn grupo en particular:
El usuario puede hacer clic en el botn con el icono de la impresora para imprimir el reporte.
Problema Propuesto.
Ing. Alberto Moreno Cueva
Pgina
1366
I. PREGUNTA
I.- FORMULARIO N 1:
ESPECIFICACIONES
Desarrolle la aplicacin con programacin en n-capas.(capa de datos,negocios,..) con
aplicacin de mnimo tres procedimientos almacenados.
En el ListBox (lstAutor) se mostrarn todos los nombres de autores de la tabla AUTOR.(3 pts)
Al elegir un Autor se deber mostrar en el listbox de libros, slo los libros asignados al autor
seleccionado de la tabla LIBROS. (3 ptos.)
Seleccionando el nombre del libro en el lstLibros listar en el DataGridView el movimiento de
prstamos de ese libro de la tabla PRESTAMO (3 Ptos)
Slo si ha elegido un Autor y un libro, se podr agregar operaciones a la tabla PRESTAMO,
para lo cual se ingresar el nmero de prstamo, se debe elegir el nombre del alumno
(mostrar su cdigo), deber ingresar o seleccionar la fecha de prstamo y la fecha de
devolucin, el campo estado de prstamo tendr un valor igual a 1 que significa libro en estado
pendiente. ( 2 ptos )
El botn Grabar registra los datos en la tabla PRESTAMO ( 4 ptos)
BDBIBLIOTECA
LstAutor
LstLibro
Ing. Alberto Moreno Cueva
Pgina
1367
El botn Reporte muestra en el formulario frmReporte un informe en Crystal Reports de todos
los registros de la tabla PRESTAMO.
El botn Salir finaliza el proyecto.
Semana 19 : (Examen Final)
Semana 20 : (Examen de Recuperacion)
Direcciones de Internet
http://vagos.wamba.com/
https://www.microsoft.com/downloads/details.aspx?FamilyID=518d870c-fa3e-4f6a-97f5-
acaf31de6dce&DisplayLang=en#filelist
http://programaschampoloco.blogspot.com/
http://msdn.microsoft.com/es-es/library/system.windows.forms.tabcontrol(VS.80).aspx
http://es.gotdotnet.com/quickstart
http://www.solucionesNet.org
http://www.lawebdelprogramador.com
Encargados:
Ing: Alberto Moreno Cueva