Programación Con Visual Basic - UCLM

Transcription

Programación conVisual Basic n/vbn.htm4 – Interfaz de Usuario. Entrada/Salida.Desarrollo de una aplicaciónFrancisco RuizManuel SerranoEscuela Superior de InformáticaUniversidad de Castilla-La ManchaProgramación con Visual Basic .NETContenidos sesión 4 Interfaz de Usuario Formularios.Controles.Menús.Formularios MDI. Archivos. Acceso a datos. ADO.NET Desarrollo de una aplicación.UCLM-ESI. Programación con Visual Basic .NET3. 2 1

Formularios.Creación de un formulario (i). System.Windows.Forms Clase Form SizeLocation / xFormBorderStyleText(Name) --errorUCLM-ESI. Programación con Visual Basic .NET3. 3Formularios.Creación de un formulario (ii). Ver- Código (F7)UCLM-ESI. Programación con Visual Basic .NET3. 4 2

Formularios.Eventos del formulario.Private Sub frmEjemplo MouseMove(ByVal sender As Object, ByVale As System.Windows.Forms.MouseEventArgs) HandlesMyBase.MouseMoveMe.Text "Coordenadas ratón: X:" & e.X & " Y:" & e.YEnd SubPrivate Sub frmEjemplo Closing(ByVal sender As Object, ByVale As System.ComponentModel.CancelEventArgs) HandlesMyBase.ClosingIf MessageBox.Show("¿Cerrar la ventana?","Atención", MessageBoxButtons.YesNo,MessageBoxIcon.Hand) DialogResult.No Thene.Cancel TrueEnd IfEnd SubUCLM-ESI. Programación con Visual Basic .NET3. 5Controles.Insertar controles en un formulario. Cuadro de herramientas. Clic sobre el control (selección). Doble clic / Intro (inserción). GridSize / SnapToGrid / DrawGrid Herramientas- Opciones- Diseñador de Windows Forms Formato (Alinear, Igualar tamaño, Bloquear controles ) Anchor DockUCLM-ESI. Programación con Visual Basic .NET3. 6 3

Controles.Controles más habituales. onGroupBoxUCLM-ESI. Programación con Visual Basic .NET3. 7Controles.Controles más habituales. Button. undImageFlatStyleFontUCLM-ESI. Programación con Visual Basic .NETName: btnMensajeText: Mostrar MensajebtnMensaje ClickMessageBox.Show(“Has pulsadoel botón del formulario”)btnMensaje MouseEnterMe.btnMensaje.BackColor Color.CyanbtnMensaje MouseLeaveMe.btnMensaje.ResetBackColor()3. 8 4

Controles.Controles más habituales. Label. BorderStyleUCLM-ESI. Programación con Visual Basic .NET3. 9Controles.Controles más habituales. TextBox (i). gMaxLengthPasswordCharAutoSizeUCLM-ESI. Programación con Visual Basic .NET3. 10 5

Controles.Controles más habituales. TextBox (ii).btnFoco Click:Me.txtNombre.Focus()btnSoloLectura Click:If (Me.txtNombre.ReadOnly) ThenMe.txtNombre.ReadOnly FalseElseMe.txtNombre.ReadOnly TrueEnd IfbtnActivar Click:Me.txtApellidos.Enabled Not (Me.txtApellidos.Enabled) TabIndex (Ver- Orden de tabulación) / TabStopUCLM-ESI. Programación con Visual Basic .NET3. 11Controles.Controles más habituales. TextBox (iii). Copiar/Cortar/Pegar - transparente al usuario SelectionStartSelectionLengthSelectedTextUCLM-ESI. Programación con Visual Basic .NET3. 12 6

Controles.Controles más habituales. TextBox (iv).txtOrigen TextChanged:Me.lblContador.Text Me.txtOrigen.TextLengthtxtOrigen MouseMove:If e.Button.Left ThenMe.lblTextoSelec.Text Me.txtOrigen.SelectedTextMe.lblLongitud.Text Me.txtOrigen.SelectionLengthMe.lblPosicion.Text Me.txtOrigen.SelectionStartEnd IftxtOrigen KeyDown:btnSeleccionar Click:If e.Shift Then'mayúsculas'flecha derechaIf e.KeyCode.Right Then End IfEnd IfMe.txtPosicion.Text Me.txtOrigen.SelectionStartMe.txtLongitud.Text Me.txtOrigen.SelectionLengthMe.txtDestino.Text Me.txtOrigen.SelectedTextUCLM-ESI. Programación con Visual Basic .NET3. 13Controles.Controles más habituales. RadioButton y GroupBox.rbtTahoma CheckedChanged:Me.txtNombre.Font New Font(“Tahoma”, 12)rbtGaramond CheckedChanged:Me.txtNombre.Font New Font(“Garamond”, 8)rbtComic CheckedChanged:Me.txtNombre.Font New Font(“Comic Sans MS”, 12)rbtVerde CheckedChanged:Me.txtNombre.BackColor Color.GreenrbtAzul CheckedChanged:Me.txtNombre.BackColor Color.BluerbtAmarillo CheckedChanged:Me.txtNombre.BackColor Color.YellowUCLM-ESI. Programación con Visual Basic .NET3. 14 7

Controles.Controles más habituales. ListBox (i). electedItemSelectedItemsSelectedIndexUCLM-ESI. Programación con Visual Basic .NET3. 15Controles.Controles más habituales. ListBox (ii).UCLM-ESI. Programación con Visual Basic .NET3. 16 8

Controles.Controles más habituales. ListBox (iii).Public Const TITULO As String "Elemento seleccionado: "lstValores SelectedIndexChanged:Me.Text TITULO & Me.lstValores.SelectedItemrbtUno CheckedChanged:Me.lstValores.SelectionMode Selection.OnerbtMultiple CheckedChanged:Me.lstValores.SelectionMode Selection.MultiSimplerbtExtendida CheckedChanged:Me.lstValores.SelectionMode Selection.MultiExtendedchkOrdenar CheckedChanged:Me.lstValores.Sorted Me.chkOrdenar.CheckedchkColumnas CheckedChanged:Me.lstValores.MultiColumn Me.chkColumnas.CheckedUCLM-ESI. Programación con Visual Basic .NET3. 17Controles.Controles más habituales. ListBox (iv).btnAgregar Buscar Click:Dim iPosicion As Integer' el método FindString() de la lista busca un valoriPosicion Me.lstValores.FindString(Me.txtValor.Text)' el campo NoMatches indica si no existe el valor buscadoIf iPosicion Me.lstValores.NoMatches ThenMessageBox.Show("No existe el valor")Else' si encontramos el valor en la lista,' lo seleccionamos por códigoMe.lstValores.SelectedIndex iPosicionEnd IfUCLM-ESI. Programación con Visual Basic .NET3. 18 9

Controles.Controles más habituales. ListBox (v).btnSelecCod Click:Me.rbtMultiple.Checked TrueMe.lstValores.SetSelected(1, True)Me.lstValores.SetSelected(3, True)Me.lstValores.SetSelected(5, True)btnTraspasarSelec Click:Dim oSeleccion As ListBox.SelectedObjectCollection' obtenemos con los elementos seleccionados del ListBoxoSeleccion Me.lstValores.SelectedItems' si hay elementos seleccionados, los traspasamos a otro ListBoxIf oSeleccion.Count 0 ThenDim oEnumerador As IEnumeratoroEnumerador oSeleccion.GetEnumerator()While umerador.Current)End WhileEnd IfUCLM-ESI. Programación con Visual Basic .NET3. 19Controles.Controles más habituales. ListBox (vi).btnLimpiar Click:Me.lstTraspaso.Items.Clear()UCLM-ESI. Programación con Visual Basic .NET3. 20 10

Controles.Controles más habituales. ComboBox. TextBox .cboColores.Items.AddRange(New String() {"AZUL","AMARILLO", "ROJO", "BLANCO", "MARRÓN", "GRANATE“)"VERDE",UCLM-ESI. Programación con Visual Basic .NET3. 21Menús. MainMenu, ContextMenu (contenedores) MenuItemUCLM-ESI. Programación con Visual Basic .NET3. 22 11

Menús.MainMenu (i). MainMenu, ContextMenu (contenedores) MenuItem wShortCutVisibleMdiList &-UCLM-ESI. Programación con Visual Basic .NET3. 23Menús.MainMenu (ii).mnuAbrir Click: MessageBox.Show("Opción Abrir")mnuSalir Click: Me.Close()UCLM-ESI. Programación con Visual Basic .NET3. 24 12

Menús.MainMenu (iii).btnHabilitar Click:Me.mnuGuardar.Enabled Not Me.mnuGuardar.EnabledbtnMarcar Click:Me.mnuPegar.Checked Not Me.mnuPegar.CheckedbtnMostrar Click:Me.mnuElipse.Visible Not Me.mnuElipse.VisiblebtnNombre Click:If Me.mnuAbrir.Text "A&brir" ThenMe.mnuAbrir.Text "HO&LA"ElseMe.mnuAbrir.Text "A&brir"End IfbtnDefecto Click:Me.mnuCopiar.DefaultItem Not Me.mnuCopiar.DefaultItemUCLM-ESI. Programación con Visual Basic .NET3. 25Menús.ContextMenu.mnuFuente Click:Dim oFuente As New Font(“Comic”, 15)Me.txtValor.Font oFuentemnuMayusculas Click:Me.txtValor.Text Me.txtValor.Text.ToUpper()mnuMinusculas Click:Me.txtValor.Text Me.txtValor.Text.ToLower()UCLM-ESI. Programación con Visual Basic .NET3. 26 13

Formularios MDI(Multiple Document Interface) (i). 1 Formulario MDI n Formularios Documento. IsMDIContainer / MdiParentImports System.IObtnGrabar Click:Dim oEscritor as StreamWriteroEscritor (Me.txtCarta.Text)oEscritor.Close()UCLM-ESI. Programación con Visual Basic .NETFormularios MDI3. 27(ii).tmrTiempo Tick:Dim dtFecha As DatedtFecha DateTime.TodayDim dtHora As DatedtHora DateTime.NowMe.lblFecha.Text dtFecha.ToString("d/MMM/yyyy")Me.lblHora.Text dtHora.ToString("h:m:s")UCLM-ESI. Programación con Visual Basic .NET3. 28 14

Formularios MDI(iii).mnuCarta Click:Dim ofrmCarta As New frmCarta()ofrmCarta.MdiParent MeofrmCarta.Show()mnuInformacion Click:Dim ofrmInfo As New frmInfo()ofrmInfo.MdiParent MeofrmInfo.Show()UCLM-ESI. Programación con Visual Basic .NETFormularios MDI3. 29(iv).mnuCascada Click:Me.LayoutMdi(MdiLayout.Cascade)mnuHorizontal SI. Programación con Visual Basic .NET3. 30 15

Archivos.Gestión del Sistema de Archivos. System.IO Objetos Stream TextReader / TextWriter StreamReader, StreamWriterUCLM-ESI. Programación con Visual Basic .NET3. 31Archivos.La clase StreamWriterImports System.IOModule Module1Sub Main()Dim swEscritor As StreamWriter' creamos un stream de escritura, y al mismo tiempo un' nuevo archivo para escribir texto sobre élswEscritor New StreamWriter("\pruebas\NOTAS.txt")' escribir líneasswEscritor.WriteLine("esta es la primera línea")swEscritor.WriteLine("segunda línea de texto")' ahora escribimos texto pero sin provocar un salto de líneaswEscritor.Write("Juan y Luna ")swEscritor.Write("van de paseo")swEscritor.Write(swEscritor.NewLine) ' esto introduce el salto de líneaswEscritor.WriteLine("con esta línea cerramos")' cerrar el stream y el archivo asociadoswEscritor.Close()End SubEnd ModuleUCLM-ESI. Programación con Visual Basic .NET3. 32 16

Archivos.La clase StreamReader (i)Dim srLector As StreamReader New e("**Leer una primera línea**")Dim Linea As StringLinea srLector.ReadLine()Console.WriteLine("La línea contiene -- {0}", a leemos el resto del archivo**")Dim Texto As StringTexto srLector.ReadToEnd()Console.WriteLine("El texto restante contiene -- {0}", Texto)srLector.Close()' leer línea a línea mediante un bucleDim srLector As StreamReader New StreamReader("\pruebas\Datos.txt")Dim Linea As StringDim ContadorLin As Integer 1Linea srLector.ReadLine()Do While Not (Linea Is Nothing)Console.WriteLine("Línea: {0} - Contenido: {1}", ContadorLin, Linea)ContadorLin 1Linea srLector.ReadLine()LoopUCLM-ESI. Programación con Visual Basic .NET3. 33Archivos.La clase StreamReader (ii)Imports System.IOImports System.TextModule Module1Sub Main()Dim srLector As StreamReader New StreamReader("\pruebas\NOTAS.txt")' obtener valores del stream con el método Read()Dim Valor As Integer : Dim Codigos() As Byte' volcamos en un bucle los códigos de carácter leidos desde el archivo a un array ByteValor srLector.Read()While (Valor -1) ' cuando lleguemos al final, obtendremos -1If Codigos Is Nothing Then : ReDim Codigos(0)Else : ReDim Preserve Codigos(Codigos.GetUpperBound(0) 1)End IfCodigos(Codigos.GetUpperBound(0)) ValorValor srLector.Read()End WhileDim Codificador As New ASCIIEncoding() : Dim Parte2 As String' con un ASCIIEncoding, y el método GetString(), obtenemos una cadena, pasando un array BytesParte2 esultado:") : Console.WriteLine(Parte2)Console.ReadLine()End SubEnd ModuleUCLM-ESI. Programación con Visual Basic .NET3. 34 17

Archivos.La clase StreamReader (ii)' obtener valores del stream con el método Read()Dim Valor As Integer : Dim Codigos() As Byte' vamos a ir volcando en un bucle los códigos de carácter' leidos desde el archivo a un array ByteValor srLector.Read()While (Valor -1) ' cuando lleguemos al final, obtendremos -1If Codigos Is Nothing ThenReDim Codigos(0)Else : ReDim Preserve Codigos(Codigos.GetUpperBound(0) 1)End IfCodigos(Codigos.GetUpperBound(0)) ValorValor srLector.Read()End WhileDim Codificador As New ASCIIEncoding() : Dim Parte2 As String' con el objeto ASCIIEncoding, método GetString(),' obtenemos una cadena, pasando como parámetro un array de tipos ByteParte2 esultado de la lectura con Line()End SubEnd ModuleUCLM-ESI. Programación con Visual Basic .NET3. 35Archivos.La clase FileStream (i)' escrituras con FilestreamDim oFileStream As FileStreamoFileStream New FileStream("\pruebas\apuntes.dtt", FileMode.CreateNew)oFileStream.Write(New Byte() {15, 160, 88, 40, 67, 24, 37, 50, 21}, 0, ones en el FileStream")Console.WriteLine("Podemos leer: {0}", IIf(oFileStream.CanRead, "SI", "NO"))Console.WriteLine("Podemos escribir: {0}", IIf(oFileStream.CanWrite, "SI", "NO"))Console.WriteLine("Podemos movernos: {0}", IIf(oFileStream.CanSeek, "SI", "NO"))oFileStream.Close()oFileStream NothingUCLM-ESI. Programación con Visual Basic .NET3. 36 18

Archivos.La clase FileStream (ii)' lectura con FileStreamDim oFileStream As FileStreamoFileStream New FileStream("\pruebas\apuntes.dtt", FileMode.Open)Dim Valor As ByteValor oFileStream.ReadByte() ' obtener un valorConsole.WriteLine("Se ha leido el valor: {0}", Valor)Console.WriteLine("Nos desplazamos dos bytes en el stream")oFileStream.Seek(2, SeekOrigin.Begin)Valor oFileStream.ReadByte()Console.WriteLine("Se ha leido el valor: {0}", Valor)Console.WriteLine("La posición actual del stream es: {0}",oFileStream.Position)' leer varios valores, pasándolos a un array previamente dimensionadoDim VariosValores(3) As ByteoFileStream.Read(VariosValores, 0, 4)Console.WriteLine("Leer bloque de valores del stream")Dim Enumerador As IEnumeratorEnumerador VariosValores.GetEnumerator()While Enumerador.MoveNextConsole.WriteLine("Valor: {0}", Enumerador.Current)End WhileConsole.ReadLine()UCLM-ESI. Programación con Visual Basic .NET3. 37Acceso a datos. ADO.NET Conjunto de interfaces, clases, estructuras y enumeraciones que permiten el acceso a datosdesde la plataforma .NETPermite un modo desconectado a los datos.Los datos pueden provenir de múltiples fuentesde datos y de diferentes arquitecturas dealmacenamiento.Basado en XML.UCLM-ESI. Programación con Visual Basic .NET3. 38 19

ADO.NETLa clase DataSetUCLM-ESI. Programación con Visual Basic .NET3. 39ADO.NETEspacios de Nombres nternalUCLM-ESI. Programación con Visual Basic .NET3. 40 20

ADO.NETSystem.Data raintDataColumnMappingDataTableMappingUCLM-ESI. Programación con Visual Basic .NET3. 41ADO.NETSystem.Data.SqlClient / System.Data.OleDb SqlCommand / OleDbCommandSqlConnection / OleDbConnectionSqlCommandBuilder / OleDbCommandBuilderSqlDataReader / OleDbDataReaderSqlDataAdapter / OleDbDataAdapterSqlParameter / OleDbParameterSqlTransaction / OleDbTransactionUCLM-ESI. Programación con Visual Basic .NET3. 42 21

ADO.NETLas clases ConnectionImports System.Data.SqlClient'.Try' crear el objeto de conexiónDim oConexion As New SqlConnection()' pasar la cadena de conexiónoConexion.ConnectionString "server (local);" &"database Xnorthwind;uid sa;pwd ;"' abrir o")' cerrar ctado")Catch oExcep As SqlException' si se produce algún error, lo capturamos mediante el objeto' de excepciones particular para el proveedor de SQL ServerMessageBox.Show("Error al conectar con datos" & ControlChars.CrLf &oExcep.Message & ControlChars.CrLf & oExcep.Server)End TryUCLM-ESI. Programación con Visual Basic .NET3. 43ADO.NETLas clases Command (i) metersUCLM-ESI. Programación con Visual Basic .NET ScalarPrepare3. 44 22

ADO.NETLas clases Command (ii)' crear conexiónDim oConexion As New SqlConnection()oConexion.ConnectionString "Server (local);" &"Database Gestion;uid sa;pwd ;"' crear sentencia SQLDim sSQL As StringsSQL "INSERT INTO Clientes (IDCliente,Nombre,FIngreso) " &"VALUES(10,'Alfredo','18/7/2002')"' crear comandoDim oComando As New SqlCommand(sSQL, oConexion)Dim iResultado As IntegeroConexion.Open() ' abrir conexióniResultado oComando.ExecuteNonQuery() ' ejecutar comandooConexion.Close() ' cerrar conexiónMessageBox.Show("Registros añadidos:" & iResultado)UCLM-ESI. Programación con Visual Basic .NET3. 45ADO.NETLas clases DataReader (i) FieldCount IsClosed ItemUCLM-ESI. Programación con Visual Basic .NET CloseGetXXXNextResultRead3. 46 23

ADO.NETLas clases DataReader (ii)Private Sub btnEmpleados Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles btnEmpleados.Click' crear conexionDim oConexion As New SqlConnection()oConexion.ConnectionString "Server (local);" &"Database Northwind;uid sa;pwd ;"' crear comandoDim oComando As New SqlCommand("SELECT * FROM Employees", oConexion)' crear DataReaderDim oDataReader As SqlDataReaderoConexion.Open()oDataReader oComando.ExecuteReader() ' obtener DataReader' recorrer filasWhile eader("LastName"))End WhileoDataReader.Close()oConexion.Close()End SubUCLM-ESI. Programación con Visual Basic .NET3. 47ADO.NETLa clase DataSet (i) sMergeUCLM-ESI. Programación con Visual Basic .NET CaseSensitiveDataSetNameHasErrorsRelationsTables3. 48 24

ADO.NETLa clase DataSet (ii)' crear conexiónDim oConexion As New SqlConnection()oConexion.ConnectionString "Server (local);Database Northwind;uid sa;pwd ;"' crear adaptadorDim oDataAdapter As New SqlDataAdapter("SELECT * FROM Customers ORDER BYContactName", oConexion)' crear conjunto de datosDim oDataSet As New DataSet()oConexion.Open()' utilizar el adaptador para llenar el dataset con una tablaoDataAdapter.Fill(oDataSet, "Customers")oConexion.Close()' una vez desconectados, recorrer la tabla del datasetDim oTabla As DataTableoTabla oDataSet.Tables("Customers")Dim oFila As DataRowFor Each oFila In oTabla.Rows' mostrar los datos mediante un objeto ame")& " - " & oFila.Item("ContactName") & " - " &oFila.Item("Country"))NextUCLM-ESI. Programación con Visual Basic .NET3. 49ADO.NETLas clases DataAdapter (i) ndUCLM-ESI. Programación con Visual Basic .NET3. 50 25

Desarrollo de una Aplicación ProTex v. 1.0 Sencillo procesador de textosAplicación MDI con 2 formulariosFormulario frmPrincipal (Menú): Archivo: Nuevo, Abrir, Guardar, SalirFormato: Fuente, Tamaño, Color de Texto, Color de FondoVentana: Cascada, Horizontal, VerticalFormularios frmDocumento (cuadro de texto)UCLM-ESI. Programación con Visual Basic .NET3. 51 26

4 UCLM-ESI. Programación con Visual Basic .NET 3. 7 Controles. Controles más habituales. Button Label TextBox ListBox ComboBox CheckBox RadioButton GroupBox UCLM-ESI. Programación con Visual Basic .NET 3. 8 Controles.