Programaci Programaci ó ó n con n con Visual Basic .NET Visual Basic .NET http http :// :// alarcos.inf alarcos.inf - - cr.uclm.es cr.uclm.es / / per per / / fruiz fruiz / / cur cur / / vbn vbn / / vbn.htm vbn.htm Francisco Ruiz Francisco Ruiz Manuel Serrano Manuel Serrano Escuela Superior de Inform Escuela Superior de Inform á á tica tica Universidad de Castilla Universidad de Castilla - - La Mancha La Mancha 4 4 – – Interfaz de Usuario. Entrada/Salida. Interfaz de Usuario. Entrada/Salida. Desarrollo de una aplicaci Desarrollo de una aplicaci ó ó n n
51
Embed
Programación con Visual Basic - UCLMalarcos.esi.uclm.es/per/fruiz/cur/vbn/ses/vbnet-4c.pdf · UCLM-ESI. Programación con Visual Basic .NET 3. 2 Programación con Visual Basic .NET
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
CreaciCreacióón de un formulario (n de un formulario (iiii).).
•• VerVer-->C>Cóódigo (F7)digo (F7)
UCLM-ESI. Programación con Visual Basic .NET 3. 5
FormulariosFormularios..
Eventos del formulario.Eventos del formulario.
PrivatePrivate SubSub frmEjemplo_MouseMove(ByValfrmEjemplo_MouseMove(ByVal sendersender As As ObjectObject, , ByValByVal _ _ e As e As System.Windows.Forms.MouseEventArgsSystem.Windows.Forms.MouseEventArgs) ) HandlesHandles _ _ MyBase.MouseMoveMyBase.MouseMove
PrivatePrivate SubSub frmEjemplo_Closing(ByValfrmEjemplo_Closing(ByVal sendersender As As ObjectObject, , ByValByVal __e As e As System.ComponentModel.CancelEventArgsSystem.ComponentModel.CancelEventArgs) ) HandlesHandles _ _ MyBase.ClosingMyBase.Closing
IfIf MessageBox.ShowMessageBox.Show("("¿¿Cerrar la ventana?", _Cerrar la ventana?", _"Atenci"Atencióón", n", MessageBoxButtons.YesNoMessageBoxButtons.YesNo, _, _MessageBoxIcon.HandMessageBoxIcon.Hand) = ) = DialogResult.NoDialogResult.No ThenThen
e.Cancele.Cancel = = TrueTrueEndEnd IfIf
EndEnd SubSub
UCLM-ESI. Programación con Visual Basic .NET 3. 6
Controles.Controles.
Insertar controles en un formulario.Insertar controles en un formulario.
•• Cuadro de herramientas.Cuadro de herramientas.•• Clic sobre el control (selecciClic sobre el control (seleccióón).n).•• Doble clic / <Doble clic / <IntroIntro> (inserci> (insercióón).n).
•• TabIndexTabIndex (Ver(Ver-->Orden de tabulaci>Orden de tabulacióón) / n) / TabStopTabStop
UCLM-ESI. Programación con Visual Basic .NET 3. 12
Controles.Controles.
Controles mControles máás habituales. s habituales. TextBoxTextBox ((iiiiii).).
•• Copiar/Cortar/Pegar Copiar/Cortar/Pegar --> transparente al usuario> transparente al usuarioSelectionStartSelectionStartSelectionLengthSelectionLengthSelectedTextSelectedText
UCLM-ESI. Programación con Visual Basic .NET 3. 13
Controles.Controles.
Controles mControles máás habituales. s habituales. TextBoxTextBox ((iviv).).
UCLM-ESI. Programación con Visual Basic .NET 3. 16
Controles.Controles.
Controles mControles máás habituales. s habituales. ListBoxListBox ((iiii).).
UCLM-ESI. Programación con Visual Basic .NET 3. 17
Controles.Controles.
Controles mControles máás habituales. s habituales. ListBoxListBox ((iiiiii).).
PublicPublic ConstConst TITULO As TITULO As StringString = "Elemento seleccionado: "= "Elemento seleccionado: "
lstValores_lstValores_SelectedIndexChangedSelectedIndexChanged::Me.TextMe.Text = TITULO & = TITULO & Me.lstValores.SelectedItemMe.lstValores.SelectedItem
btnTraspasarSelec_btnTraspasarSelec_ClickClick::DimDim oSeleccionoSeleccion As As ListBox.SelectedObjectCollectionListBox.SelectedObjectCollection' obtenemos con los elementos seleccionados del ' obtenemos con los elementos seleccionados del ListBoxListBoxoSeleccionoSeleccion = = Me.lstValores.SelectedItemsMe.lstValores.SelectedItems' si hay elementos seleccionados, los traspasamos a otro ' si hay elementos seleccionados, los traspasamos a otro ListBoxListBoxIfIf oSeleccion.CountoSeleccion.Count > 0 > 0 ThenThen
DimDim oEnumeradoroEnumerador As As IEnumeratorIEnumeratoroEnumeradoroEnumerador = = oSeleccion.GetEnumeratoroSeleccion.GetEnumerator()()WhileWhile oEnumerador.MoveNextoEnumerador.MoveNext()()
SubSub MainMain()()DimDim swEscritorswEscritor As As StreamWriterStreamWriter' creamos un ' creamos un streamstream de escritura, y al mismo tiempo unde escritura, y al mismo tiempo un' nuevo archivo para escribir texto sobre ' nuevo archivo para escribir texto sobre ééllswEscritorswEscritor = = NewNew StreamWriterStreamWriter("("\\pruebaspruebas\\NOTAS.txtNOTAS.txt")")' escribir l' escribir lííneasneasswEscritor.swEscritor.WriteLineWriteLine("esta es la primera l("esta es la primera líínea")nea")swEscritor.WriteLineswEscritor.WriteLine("segunda l("segunda líínea de texto")nea de texto")' ahora escribimos texto pero sin provocar un salto de l' ahora escribimos texto pero sin provocar un salto de lííneaneaswEscritor.swEscritor.WriteWrite("Juan y Luna ")("Juan y Luna ")swEscritor.WriteswEscritor.Write("van de paseo")("van de paseo")swEscritor.Write(swEscritor.NewLineswEscritor.Write(swEscritor.NewLine) ' esto introduce el salto de l) ' esto introduce el salto de lííneaneaswEscritor.WriteLineswEscritor.WriteLine("con esta l("con esta líínea cerramos")nea cerramos")' cerrar el ' cerrar el streamstream y el archivo asociadoy el archivo asociadoswEscritor.swEscritor.CloseClose()()
EndEnd SubSubEndEnd ModuleModule
UCLM-ESI. Programación con Visual Basic .NET 3. 33
Archivos.Archivos.
La clase La clase StreamReaderStreamReader (i)(i)DimDim srLectorsrLector As As StreamReaderStreamReader = = NewNew StreamReaderStreamReader("("\\pruebaspruebas\\NOTAS.txtNOTAS.txt")")Console.WriteLineConsole.WriteLine("**Leer una primera l("**Leer una primera líínea**")nea**")DimDim LineaLinea As As StringStringLineaLinea = = srLector.srLector.ReadLineReadLine()()Console.WriteLineConsole.WriteLine("La l("La líínea contiene nea contiene ----> {0}", > {0}", LineaLinea))Console.WriteLineConsole.WriteLine()()Console.WriteLineConsole.WriteLine("**Ahora leemos el resto del archivo**")("**Ahora leemos el resto del archivo**")DimDim Texto As Texto As StringStringTexto = Texto = srLector.srLector.ReadToEndReadToEnd()()Console.WriteLineConsole.WriteLine("El texto restante contiene ("El texto restante contiene ----> {0}", Texto)> {0}", Texto)srLector.ClosesrLector.Close()()
' leer l' leer líínea a lnea a líínea mediante un buclenea mediante un bucleDimDim srLectorsrLector As As StreamReaderStreamReader = = NewNew StreamReaderStreamReader("("\\pruebaspruebas\\Datos.txtDatos.txt")")DimDim LineaLinea As As StringStringDimDim ContadorLinContadorLin As As IntegerInteger = 1= 1LineaLinea = = srLector.ReadLinesrLector.ReadLine()()Do Do WhileWhile NotNot ((LineaLinea IsIs NothingNothing))
UCLM-ESI. Programación con Visual Basic .NET 3. 34
Archivos.Archivos.
La clase La clase StreamReaderStreamReader ((iiii))ImportsImports System.IOSystem.IOImportsImports System.TextSystem.TextModule Module1Module Module1SubSub MainMain()()
DimDim srLectorsrLector As As StreamReaderStreamReader = = NewNew StreamReaderStreamReader("("\\pruebaspruebas\\NOTAS.txtNOTAS.txt")")' obtener valores del ' obtener valores del streamstream con el mcon el méétodo todo ReadRead()()DimDim Valor As Valor As IntegerInteger : : DimDim CodigosCodigos() As () As ByteByte' volcamos en un bucle los c' volcamos en un bucle los cóódigos de cardigos de caráácter cter leidosleidos desde el archivo a un desde el archivo a un arrayarray ByteByteValor = Valor = srLector.ReadsrLector.Read()()WhileWhile (Valor <> (Valor <> --1) ' cuando lleguemos al final, obtendremos 1) ' cuando lleguemos al final, obtendremos --11
EndEnd WhileWhileDimDim Codificador As Codificador As NewNew ASCIIEncodingASCIIEncoding() : () : DimDim Parte2 As Parte2 As StringString' con un ' con un ASCIIEncodingASCIIEncoding, y el m, y el méétodo todo GetStringGetString(), obtenemos una cadena, pasando un (), obtenemos una cadena, pasando un arrayarray BytesBytes
UCLM-ESI. Programación con Visual Basic .NET 3. 35
Archivos.Archivos.
La clase La clase StreamReaderStreamReader ((iiii))' obtener valores del ' obtener valores del streamstream con el mcon el méétodo todo ReadRead()()DimDim Valor As Valor As IntegerInteger : : DimDim CodigosCodigos() As () As ByteByte' vamos a ir volcando en un bucle los c' vamos a ir volcando en un bucle los cóódigos de cardigos de carááctercter' ' leidosleidos desde el archivo a un desde el archivo a un arrayarray ByteByteValor = Valor = srLector.ReadsrLector.Read()()WhileWhile (Valor <> (Valor <> --1) ' cuando lleguemos al final, obtendremos 1) ' cuando lleguemos al final, obtendremos --11
EndEnd WhileWhileDimDim Codificador As Codificador As NewNew ASCIIEncodingASCIIEncoding() : () : DimDim Parte2 As Parte2 As StringString' con el objeto ' con el objeto ASCIIEncodingASCIIEncoding, m, méétodo todo GetStringGetString(),(),' obtenemos una cadena, pasando como par' obtenemos una cadena, pasando como paráámetro un metro un arrayarray de tipos de tipos ByteByteParte2 = Parte2 = Codificador.GetString(CodigosCodificador.GetString(Codigos))Console.WriteLineConsole.WriteLine("Resultado de la lectura con ("Resultado de la lectura con ReadBlockReadBlock()")()")Console.WriteLine(Parte2Console.WriteLine(Parte2))Console.ReadLineConsole.ReadLine()()
EndEnd SubSubEndEnd ModuleModule
UCLM-ESI. Programación con Visual Basic .NET 3. 36
Archivos.Archivos.
La clase La clase FileStreamFileStream (i)(i)' escrituras con ' escrituras con FilestreamFilestreamDimDim oFileStreamoFileStream As As FileStreamFileStreamoFileStreamoFileStream = = NewNew FileStreamFileStream("("\\pruebaspruebas\\apuntes.dttapuntes.dtt", ", FileMode.CreateNewFileMode.CreateNew))oFileStream.Write(NewoFileStream.Write(New ByteByte() {15, 160, 88, 40, 67, 24, 37, 50, 21}, 0, 6)() {15, 160, 88, 40, 67, 24, 37, 50, 21}, 0, 6)oFileStream.WriteByteoFileStream.WriteByte(75)(75)Console.WriteLineConsole.WriteLine("Opciones en el ("Opciones en el FileStreamFileStream")")Console.WriteLineConsole.WriteLine("Podemos leer: {0}", ("Podemos leer: {0}", IIf(oFileStream.CanReadIIf(oFileStream.CanRead, "SI", "NO")), "SI", "NO"))Console.WriteLineConsole.WriteLine("Podemos escribir: {0}", ("Podemos escribir: {0}", IIf(oFileStream.CanWriteIIf(oFileStream.CanWrite, "SI", "NO")), "SI", "NO"))Console.WriteLineConsole.WriteLine("Podemos movernos: {0}", ("Podemos movernos: {0}", IIf(oFileStream.CanSeekIIf(oFileStream.CanSeek, "SI", "NO")), "SI", "NO"))oFileStream.CloseoFileStream.Close()()oFileStreamoFileStream = = NothingNothing
UCLM-ESI. Programación con Visual Basic .NET 3. 37
Archivos.Archivos.
La clase La clase FileStreamFileStream ((iiii))' lectura con ' lectura con FileStreamFileStreamDimDim oFileStreamoFileStream As As FileStreamFileStreamoFileStreamoFileStream = = NewNew FileStreamFileStream("("\\pruebaspruebas\\apuntes.dttapuntes.dtt", ", FileMode.OpenFileMode.Open))DimDim Valor As Valor As ByteByteValor = Valor = oFileStream.ReadByteoFileStream.ReadByte() ' obtener un valor() ' obtener un valorConsole.WriteLineConsole.WriteLine("Se ha ("Se ha leidoleido el valor: {0}", Valor)el valor: {0}", Valor)Console.WriteLineConsole.WriteLine("Nos desplazamos dos ("Nos desplazamos dos bytesbytes en el en el streamstream")")oFileStream.SeekoFileStream.Seek(2, (2, SeekOrigin.BeginSeekOrigin.Begin))Valor = Valor = oFileStream.ReadByteoFileStream.ReadByte()()Console.WriteLineConsole.WriteLine("Se ha ("Se ha leidoleido el valor: {0}", Valor)el valor: {0}", Valor)Console.WriteLineConsole.WriteLine("La posici("La posicióón actual del n actual del streamstream es: {0}", _es: {0}", _oFileStream.PositionoFileStream.Position))' leer varios valores, pas' leer varios valores, pasáándolos a un ndolos a un arrayarray previamente dimensionadopreviamente dimensionadoDimDim VariosValoresVariosValores(3) As (3) As ByteByteoFileStream.Read(VariosValoresoFileStream.Read(VariosValores, 0, 4), 0, 4)Console.WriteLineConsole.WriteLine("Leer bloque de valores del ("Leer bloque de valores del streamstream")")DimDim Enumerador As Enumerador As IEnumeratorIEnumeratorEnumerador = Enumerador = VariosValores.GetEnumeratorVariosValores.GetEnumerator()()WhileWhile Enumerador.MoveNextEnumerador.MoveNext
UCLM-ESI. Programación con Visual Basic .NET 3. 38
Acceso a datos. Acceso a datos. ADO.NETADO.NET
•• Conjunto de interfaces, clases, estructuras y Conjunto de interfaces, clases, estructuras y enumeraciones que permiten el acceso a datos enumeraciones que permiten el acceso a datos desde la plataforma .NETdesde la plataforma .NET
•• Permite un modo desconectado a los datos.Permite un modo desconectado a los datos.•• Los datos pueden provenir de mLos datos pueden provenir de múúltiples fuentes ltiples fuentes
de datos y de diferentes arquitecturas de de datos y de diferentes arquitecturas de almacenamiento.almacenamiento.
•• Basado en XML.Basado en XML.
UCLM-ESI. Programación con Visual Basic .NET 3. 39
ADO.NETADO.NET
La clase La clase DataSetDataSet
UCLM-ESI. Programación con Visual Basic .NET 3. 40
UCLM-ESI. Programación con Visual Basic .NET 3. 43
ADO.NETADO.NET
Las clases Las clases ConnectionConnectionImportsImports System.Data.SqlClientSystem.Data.SqlClient'....'....TryTry' crear el objeto de conexi' crear el objeto de conexióónnDimDim oConexionoConexion As As NewNew SqlConnectionSqlConnection()()' pasar la cadena de conexi' pasar la cadena de conexióónnoConexion.ConnectionStringoConexion.ConnectionString = "= "serverserver=(local);" & _=(local);" & _
""databasedatabase==Xnorthwind;uidXnorthwind;uid==sa;pwdsa;pwd=;"=;"' abrir conexi' abrir conexióónnoConexion.OpenoConexion.Open()()MessageBox.ShowMessageBox.Show("Conectado")("Conectado")' cerrar conexi' cerrar conexióónnoConexion.CloseoConexion.Close()()MessageBox.ShowMessageBox.Show("Desconectado")("Desconectado")CatchCatch oExcepoExcep As As SqlExceptionSqlException' si se produce alg' si se produce algúún error, lo capturamos mediante el objeton error, lo capturamos mediante el objeto' de excepciones particular para el proveedor de SQL Server' de excepciones particular para el proveedor de SQL ServerMessageBox.ShowMessageBox.Show("Error al conectar con datos" & ("Error al conectar con datos" & ControlChars.CrLfControlChars.CrLf & _& _
UCLM-ESI. Programación con Visual Basic .NET 3. 47
ADO.NETADO.NET
Las clases Las clases DataReaderDataReader ((iiii))PrivatePrivate SubSub btnEmpleados_Click(ByValbtnEmpleados_Click(ByVal sendersender As As System.ObjectSystem.Object, _, _
ByValByVal e As e As System.EventArgsSystem.EventArgs) ) HandlesHandles btnEmpleados.ClickbtnEmpleados.Click' crear ' crear conexionconexionDimDim oConexionoConexion As As NewNew SqlConnectionSqlConnection()()oConexion.ConnectionStringoConexion.ConnectionString = "Server=(local);" & _= "Server=(local);" & _
""DatabaseDatabase==Northwind;uidNorthwind;uid==sa;pwdsa;pwd=;"=;"' crear comando' crear comandoDimDim oComandooComando As As NewNew SqlCommandSqlCommand("SELECT * FROM ("SELECT * FROM EmployeesEmployees", ", oConexionoConexion))' crear ' crear DataReaderDataReaderDimDim oDataReaderoDataReader As As SqlDataReaderSqlDataReaderoConexion.OpenoConexion.Open()()oDataReaderoDataReader = = oComando.ExecuteReaderoComando.ExecuteReader() ' obtener () ' obtener DataReaderDataReader' recorrer filas' recorrer filasWhileWhile oDataReader.ReadoDataReader.Read()()
UCLM-ESI. Programación con Visual Basic .NET 3. 49
ADO.NETADO.NET
La clase La clase DataSetDataSet ((iiii))' crear conexi' crear conexióónnDimDim oConexionoConexion As As NewNew SqlConnectionSqlConnection()()oConexion.ConnectionStringoConexion.ConnectionString = "Server=(local);= "Server=(local);DatabaseDatabase==Northwind;uidNorthwind;uid==sa;pwdsa;pwd=;"=;"' crear adaptador' crear adaptadorDimDim oDataAdapteroDataAdapter As As NewNew SqlDataAdapterSqlDataAdapter("SELECT * FROM ("SELECT * FROM CustomersCustomers ORDER BYORDER BY
ContactNameContactName", ", oConexionoConexion))' crear conjunto de datos' crear conjunto de datosDimDim oDataSetoDataSet As As NewNew DataSetDataSet()()oConexion.OpenoConexion.Open()()' utilizar el adaptador para llenar el ' utilizar el adaptador para llenar el datasetdataset con una tablacon una tablaoDataAdapter.Fill(oDataSetoDataAdapter.Fill(oDataSet, ", "CustomersCustomers")")oConexion.CloseoConexion.Close()()' una vez desconectados, recorrer la tabla del ' una vez desconectados, recorrer la tabla del datasetdatasetDimDim oTablaoTabla As As DataTableDataTableoTablaoTabla = = oDataSet.TablesoDataSet.Tables("("CustomersCustomers")")DimDim oFilaoFila As As DataRowDataRowForFor EachEach oFilaoFila In In oTabla.RowsoTabla.Rows
' mostrar los datos mediante un objeto fila' mostrar los datos mediante un objeto filaMe.lstCustomers.Items.Add(oFila.ItemMe.lstCustomers.Items.Add(oFila.Item("("CompanyNameCompanyName") ")
UCLM-ESI. Programación con Visual Basic .NET 3. 51
Desarrollo de una AplicaciDesarrollo de una Aplicacióónn
•• ProTexProTex v. 1.0v. 1.0Sencillo procesador de textosSencillo procesador de textosAplicaciAplicacióón MDI con 2 formulariosn MDI con 2 formulariosFormulario Formulario frmPrincipalfrmPrincipal (Men(Menúú):):
Archivo: Nuevo, Abrir, Guardar, SalirArchivo: Nuevo, Abrir, Guardar, SalirFormato: Fuente, TamaFormato: Fuente, Tamañño, Color de Texto, Color de Fondoo, Color de Texto, Color de FondoVentana: Cascada, Horizontal, VerticalVentana: Cascada, Horizontal, Vertical
Formularios Formularios frmDocumentofrmDocumento (cuadro de texto)(cuadro de texto)