guia para iniciarse en visual studio .net
DESCRIPTION
Para todos aquellos q quieren aprender a desarrollar con Visaul Studio .Net esta guia es muy útilTRANSCRIPT
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Desarrollando Aplicaciones Windows con Visual Basic .Net
Guía de Referencia
Nombre del Proyecto: WinAppLatam
Pagina: 1
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Cómo crear un nuevo formulario? Abra el Solution Explorer; Haga click en el botón derecho sobre WinAppLatam; Seleccione Add / Add Windows Form; Digite el respectivo Nombre del formulario y haga click en el botón Open.
FORMULARIOS
Controls (1)
Nombre del formulario: frmRestaurantePropiedadesText: Arme su plato preferido !!!StartPosition: CenterScreen
Controls y propiedadesLabel1 (Text): Plato:TextBox: txtNombrePlato
Label2 (Text): Ingredientes:ListBox: lstIngredientes
Button1 (ID): btnAnadirText: Añadir >>
Button2 (ID): btnExcluirText: Excluir <<
Button3 (ID): btnNuevoText: Nuevo Plato
Button4 (ID): btnEspecialText: Especial
Label3 (Text): Plato:ListBox: lstPlato
GroupBox (Name): gpLocalText: Local2 RadioButtons
GroupBox (Name): gpEnvase
Pagina: 2
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Text: Envase3 CheckBox
GroupBox (Name): gpBebidasText: Bebidas4 CheckBox
Button5 (ID): btnFinalizarText: Finalizar el Armado del Plato
Códigos
Public Sub New()MyBase.New()
'This call is required by the Windows Form Designer. InitializeComponent()
'Add any initialization after the InitializeComponent() call
'Arma un ArrayList de Ingredientes Dim ArrayIng As New ArrayList With ArrayIng .Add("Ajo") .Add("Aceite") .Add("Bróculi") .Add("Espagueti") .Add("Sal") .Add("Queso parmesano rallado") .Add("Salsa Blanca") .Add("Salsa Boloñesa") .Add("Funghi") .Sort() End With With Me.lstIngredientes .DataSource = ArrayIng .SelectedIndex = 0 End With Me.gpEnvase.Enabled = FalseEnd Sub
Private Sub btnAnadir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnadir.Click ' Anadir un ingrediente If Me.lstPlato.FindString(Me.lstIngredientes.SelectedItem) = -1 Then Me.lstPlato.Items.Add(Me.lstIngredientes.SelectedItem) End IfEnd Sub
Private Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluir.Click ' Exclui un ingrediente If Me.lstIngredientes.SelectedIndex >= 0 Then Me.lstPlato.Items.RemoveAt(Me.lstPlato.SelectedIndex)
Pagina: 3
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
End IfEnd Sub
Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click ' Crea un plato nuevo If MessageBox.Show("¿Desea armar un plato nuevo?", "MS Food", _ MessageBoxButtons.YesNo) = DialogResult.Yes Then Me.lstPlato.Items.Clear() Me.txtNombrePlato.Text = "" End IfEnd Sub
Private Sub btnEspecial_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEspecial.Click ' Inclui un ingrediente especial Dim ing As String = InputBox("Digite el ingrediente especial", "MS Food") If ing.Length > 0 Then Me.lstPlato.Items.Add(ing.Trim) End IfEnd Sub
Private Sub btnFinalizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFinalizar.Click If Me.txtNombrePlato.Text.Trim = "" Then MessageBox.Show("Por favor, digite el nombre del plato", "MS Food", MessageBoxButtons.OK) Me.txtNombrePlato.Focus() Exit Sub Else MessageBox.Show("Buen Apetito !!!", "MS Food") End IfEnd Sub
Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged If Me.RadioButton1.Checked = True Then Me.gpEnvase.Enabled = False Else Me.gpEnvase.Enabled = True End IfEnd Sub
Pagina: 4
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Controls (2)
Nombre del formulario: FormMenuPropiedadesText: FormMenu
Controls y propiedadesMainMenu: armar el menú con las opciones:Archivo: Leer archivo texto / SalirConfigurar: Fuentes / Colores / StatusBar
TabControl1: haga click en la propiedade TabPages y en la ventana TabPage Collection Editor, adicione 2 páginas Softwares / Hardwares en la propiedade Text.En la página Softwares:Label1 (ID): lblCuadrosText: Cuadros de Diálogo
ListBox (ID): lstSoftwares
Button1 (ID): btnColoresText: Colores
Button2 (ID): btnFuenteText: Fuente
En la pagina Hardwares:
TextBox1 (ID): txtArchivoMultiline: TrueScrollBars: Both
Button3 (ID): btnArchivoText: Leer archivo texto
StatusBar (Name): myStatus
Códigos
Public Sub New() MyBase.New()
'This call is required by the Windows Form Designer. InitializeComponent()
'Add any initialization after the InitializeComponent() call
'Define el Array softwares
Pagina: 5
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Dim softwares() As String = {"Word", "Excel", "Access", "Power Point", _ "VS.NET", "Visio"} Me.lstSoftwares.DataSource = softwaresEnd Sub
Private Sub btnColores_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnColores.Click CambioColor()End Sub
Sub CambioColor() Dim color As New ColorDialog Me.myStatus.Text = "Define el color de la letra" If color.ShowDialog = DialogResult.OK Then lblCuadros.ForeColor = color.Color Me.lstSoftwares.ForeColor = color.Color End IfEnd Sub
Private Sub btnFuente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFuente.Click CambioFuente()End Sub
Sub CambioFuente() Dim fuente As New FontDialog Me.myStatus.Text = "Configura la fuente de la letra" If fuente.ShowDialog = DialogResult.OK Then Me.lblCuadros.Font = fuente.Font Me.lstSoftwares.Font = fuente.Font End IfEnd Sub
Private Sub btnArchivo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArchivo.Click LeerArchivo()End Sub
Sub LeerArchivo() Dim file As New OpenFileDialog Me.myStatus.Text = "Seleccione cualquier archivo texto" With file .DefaultExt = "*.txt" .Multiselect = False .Filter = "Text files (*.txt)|*.txt" .Title = "Seleccione un archivo..." .ShowDialog() End With If file.ShowDialog = DialogResult.OK Then Dim archivo As New System.IO.StreamReader(file.FileName) Me.txtArchivo.Text = archivo.ReadToEnd archivo.Close() End IfEnd Sub
Pagina: 6
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Private Sub mnLeer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnLeer.Click LeerArchivo()End Sub
Private Sub mnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnSalir.Click Me.Close()End Sub
Private Sub mnFuente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnFuente.Click CambioFuente()End Sub
Private Sub mnColores_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnColores.Click CambioColor()End Sub
Private Sub mnStatus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnStatus.Click Dim blnStatus As Boolean = Not Me.mnStatus.Checked Me.mnStatus.Checked = blnStatus Me.myStatus.Visible = blnStatusEnd Sub
Private Sub HandleSelect(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles mnColores.Select, mnFuente.Select, mnLeer.Select, mnSalir.Select, mnStatus.Select Dim msg As String If sender Is mnColores Then msg = "Define el color de la letra" ElseIf sender Is mnFuente Then msg = "Configura la fuente de la letra" ElseIf sender Is mnLeer Then msg = "Leer archivo texto" ElseIf sender Is mnSalir Then msg = "Cierra el formulario" ElseIf sender Is mnStatus Then msg = "Exhibe la barra de Status" Else msg = String.Empty End If Me.myStatus.Text = msgEnd Sub
Pagina: 7
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Gráficos (GDI+)
Nombre del formulario: GDIPropiedadesText: GDI
Controls y propiedades
Button1 (ID): Button1Text: Elipse
Button2 (ID): Button2Text: Drawing
TrackBar1Maximum: 100Minimum: 10Value: 10
Códigos
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dibujo As New Drawing2D.GraphicsPath Dim diametro As Integer = Me.ClientSize.Height Dim ancho As Integer = 80 dibujo.AddEllipse(0, 0, diametro, diametro) dibujo.AddEllipse(ancho, ancho, diametro - (ancho * 2), diametro - (ancho * 2)) Me.Region = New Region(dibujo)End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim dibujo As New Drawing2D.GraphicsPath dibujo.AddString("VB.NET", Me.Font.FontFamily, Font.Bold, 80, New Point(10, 0), StringFormat.GenericDefault) Me.Region = New Region(dibujo)End Sub
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll Me.Opacity = Me.TrackBar1.Value / 100 Me.Refresh() System.Threading.Thread.CurrentThread.Sleep(5)End Sub
Private Sub GDI_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint Dim rectangulo As New Rectangle(New Point(0, 0), Me.ClientSize) Dim linear As New Drawing2D.LinearGradientBrush(rectangulo, Color.Black, _
Pagina: 8
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Color.White, Drawing2D.LinearGradientMode.Vertical) e.Graphics.FillRectangle(linear, rectangulo)End Sub
Pagina: 9
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Herencia de formulario
Nombre del formulario: BaseHerenciaPropiedadesText: Calcula Impuesto a la Renta
Controls y propiedades
Label1 (Text): Nombre:TextBox (ID): txtNombreLabel2 (Text): Salario:TextBox (ID): txtSalario
Button1 (ID): btnNombreText: Verifica Nombre
Button2 (ID): btnIRText: Calcula Impuesto a la Renta
Label3 (ID): lblResultadoText: 0
Códigos
Private Sub btnNombre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNombre.Click Dim varNombre As String = Me.txtNombre.Text.Trim If varNombre <> "" Then lblResultado.Text = varNombre.ToUpper Else MessageBox.Show("Por favor, digite el nombre", "Microsoft", MessageBoxButtons.OK) Me.txtNombre.Focus() End IfEnd Sub
Private Sub btnIR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIR.Click Dim varSal As Double = Double.Parse(Me.txtSalario.Text) If varSal >= 0 Then lblResultado.Text = "Impuesto a la Renta: " & FormatNumber(CalculaIR(varSal), 2) Else MessageBox.Show("Digite el salario", "Microsoft", MessageBoxButtons.OK) End IfEnd Sub
Function CalculaIR(ByVal salario As Double) As Double 'Calcula el Impuesto a la Renta, según el salario Select Case salario
Pagina: 10
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Case Is < 900 CalculaIR = 0 Case 901 To 1800 CalculaIR = (salario * 0.15) - 135 Case Is > 1800 CalculaIR = (salario * 0.275) - 360 End SelectEnd Function
Private Sub BaseHerencia_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.txtNombre.Focus() Me.txtNombre.SelectAll()End Sub
Private Sub BaseHerencia_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing If MessageBox.Show("¿Desea cerrar?", "Microsoft", MessageBoxButtons.YesNo) = DialogResult.No Then e.Cancel() = True End IfEnd Sub
Nombre del formulario: FormHereda1
Public Class FormHereda1 Inherits WinAppLatam.BaseHerenciaEnd Class
Nombre del formulario: FormHereda2Adicione nuevo formulario y seleccione Add / Add Inherited Form. En la ventana de los formularios existentes, seleccione el BaseHerencia. Adicione otros controls en el formulario.
Controls y propiedades
Label3 (Text): Horas Extras:TextBox (ID): txtHELabel4 (Text): Ingreso Extra:TextBox (ID): txtExtra
Button1 (ID): btnNuevoImpuestoText: Calcula IR con extras
Label5 (ID): lblNuevoImpuesto
Códigos
Pagina: 11
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Private Sub btnNuevoImpuesto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevoImpuesto.Click Dim valorTotal As Double valorTotal = Double.Parse(Me.txtSalario.Text) + Double.Parse(Me.txtHE.Text) + Double.Parse(Me.txtExtra.Text) Me.lblNuevoImpuesto.Text = "IR recalculado: " & FormatNumber(CalculaIR(valorTotal), 2)End Sub
Pagina: 12
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
MDI / Modal
Nombre del formulario: FormMDI_padrePropiedadesText: FormMDI_padreIsMdiContainer: True
Controls y propiedades
Button2 (ID): btnAbreText: Abre MDI Forms
1 GroupBox com 3 checkBoxText: LayoutText dos checkboxes: Cascate / Horizontal / Vertical
Button1 (ID): Button1Text: Abre Formulario Modal
Códigos
Private Sub btnAbre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbre.Click Dim hijo1 As New FormMDI_Hijo1 hijo1.MdiParent = Me hijo1.Show()
Dim hijo2 As New FormMDI_Hijo2 hijo2.MdiParent = Me hijo2.Show()End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim formModal As New FormModal formModal.ShowDialog() Select Case formModal.DialogResult Case DialogResult.Yes MessageBox.Show("Usted pulsó SI", "MS Forms") Case DialogResult.No MessageBox.Show("Usted pulsó NO", "MS Forms") Case DialogResult.Cancel MessageBox.Show("Usted cerró el formulario", "MS Forms") End SelectEnd Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged Me.LayoutMdi(MdiLayout.Cascade)End Sub
Pagina: 13
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged Me.LayoutMdi(MdiLayout.TileHorizontal)End Sub
Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged Me.LayoutMdi(MdiLayout.TileVertical)End Sub
Otros formularios:
Nombre del formulario: FormMDI_Hijo1PropiedadesText: FormMDI_Hijo1AcceptButton: btnOKCancelButton: btnCancel
Controls y propiedades
Label1 (Text): Suscripción MSDN:TextBox1Button1 (Text): Suscripción:Button2 (ID): btnOKButton3 (ID): btnCancel
Códigos
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click MessageBox.Show("Usted pulsó ENTER", "MS Forms")End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click Me.Close()End Sub
Nombre del formulario: FormMDI_Hijo2PropiedadesText: FormMDI_Hijo2
Controls y propiedades
Label1 e DataGrid
Pagina: 14
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Tratamiento de Errores
Try / Catch / Finally
Nombre del formulario: FormError
Controls y propiedadesButton1 (ID): btnArchivoText: Abre el archivo texto
TextBox: txtArchivoScrollBars: Both
Códigos
Imports System.IO
Private Sub btnArchivo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArchivo.Click Try 'Bloque pasible de error Dim archivo As New StreamReader("c:\MSDNLatam.txt") Me.txtArchivo.Text = archivo.ReadToEnd() archivo.Close() Catch err As FileNotFoundException 'Tratamiento de error MessageBox.Show("Archivo inexistente", "MS Error") Catch err As DirectoryNotFoundException MessageBox.Show("Directorio inexistente", "MS Error") Catch err As Exception MessageBox.Show(err.Message, "MS Error") End Try
'Try ' 'bloque de código 'Catch ex As Exception ' 'trata el erro 'Finally ' 'siempre será ejecutado con o sin error ' 'Open/Close Database 'End TryEnd Sub
Pagina: 15
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
ADO .NET
Llenando Controls
Nombre del formulario: DB_LlenandoControlsStartPosition: CenterScreen
Controls y propiedadesLabel1 (Text): ID:TextBox1 (ID): txtIDLabel2 (Text): ID:TextBox2 (ID): txtNombreLabel3 (Text): ID:TextBox3 (ID): txtContactoLabel4 (Text): ID:TextBox4 (ID): txtCargoLabel5 (Text): Ciudad:TextBox1 (ID): txtCiudad
Button1 (ID): btnTopText: <<
Button2 (ID): btnPreviousText: <
TextBox6 (ID): txtNavegador
Button3 (ID): btnNextText: >
Button4 (ID): btnBottomText: >>
Para generar el DataSet, siga estos pasos:
Abra el Server Explorer con el banco de datos Northwind; Seleccione la tabla Customers y arrástelo al documento; Renombre el SqlDataAdapter1 para daCustomer; Haga click con el botón derecho sobre el daCustomer y seleccione Generate
DataSet; Digite dsCustomer y el VS.NET genera automáticamente el DsCustomer1.
Códigos
Pagina: 16
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Public Sub New() MyBase.New()
'This call is required by the Windows Form Designer. InitializeComponent()
'Add any initialization after the InitializeComponent() call
Me.daCustomers.Fill(Me.DsCustomers1) ActualizaDatos()End Sub
Sub ActualizaDatos() With Me.DsCustomers1.Customers.Rows(Me.BindingContext(Me.DsCustomers1, "Customers").Position) Me.txtID.Text = .Item("CustomerID") Me.txtNombre.Text = .Item("CompanyName") Me.txtContacto.Text = .Item("ContactName") Me.txtCargo.Text = .Item("ContactTitle") Me.txtCiudad.Text = .Item("City") End With Me.txtNavegador.Text = "Proveedor " & (Me.BindingContext(Me.DsCustomers1, "Customers").Position + 1).ToString & _ " de " & Me.BindingContext(Me.DsCustomers1, "Customers").Count.ToStringEnd Sub
Private Sub btnTop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTop.Click Me.BindingContext(Me.DsCustomers1, "Customers").Position = 0 ActualizaDatos()End Sub
Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click With Me.BindingContext(Me.DsCustomers1, "Customers") If .Position = 0 Then Beep() Else .Position -= 1 ActualizaDatos() End If End WithEnd Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click Me.BindingContext(Me.DsCustomers1).Position += 1 With Me.BindingContext(Me.DsCustomers1, "Customers") If .Position = .Count - 1 Then Beep() Else .Position += 1
Pagina: 17
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
ActualizaDatos() End If End WithEnd Sub
Private Sub btnBottom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBottom.Click With Me.BindingContext(Me.DsCustomers1, "Customers") .Position = .Count - 1 ActualizaDatos() End WithEnd Sub
Pagina: 18
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Relacionamientos
Nombre del formulario: DB_RelacionamientosStartPosition: CenterScreen
Controls y propiedadesButton1 (ID): btnConText: DataGrid Con Relacionamiento
Button2 (ID): btnSinText: DataGrid Sin Relacionamiento
DataGrid (ID): dgDatos
Para armar los Adapters, siga estos pasos:
Exhiba la Toolbox / guía Data y arraste el SqlDataAdapter hasta el documento; Siga el asistente hasta localizar la tabla Categories del banco de datos Northwind; Seleccione los campos necesarios para listar las categorías; Continúe con el asistente hasta terminar sus orientaciones; Repita el procedimiento para la tabla de Productos.
Códigos
Private Sub btnCon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCon.Click Me.Text = "DataGrid Con Relacionamiento" Try Dim dsGrid As New DataSet Me.SqlConnection1.Open() Me.daCategorias.Fill(dsGrid, "categorias") Me.daProductos.Fill(dsGrid, "productos") Me.SqlConnection1.Close() ' arma el relacionamiento dsGrid.Relations.Add("ExhibeProductos", dsGrid.Tables("categorias").Columns("CategoryID"), dsGrid.Tables("productos").Columns("CategoryID"))
' arma el DataGrid Me.dgDatos.DataSource = dsGrid Me.dgDatos.DataMember = "categorias" Catch err As Exception MessageBox.Show(err.Message) End TryEnd Sub
Private Sub btnSin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSin.Click Me.Text = "DataGrid Sin Relacionamiento" Try Dim dsGrid As New DataSet
Pagina: 19
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Me.SqlConnection1.Open() Me.daCategorias.Fill(dsGrid, "categorias") Me.daProductos.Fill(dsGrid, "productos") Me.SqlConnection1.Close()
' arma el DataGrid Me.dgDatos.DataSource = dsGrid Me.dgDatos.DataMember = "categorias" Catch err As Exception MessageBox.Show(err.Message) End TryEnd Sub
Pagina: 20
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Filtros y Clasificación
Nombre del formulario: FormFilterSortStartPosition: CenterScreenText: Aplica Filtro y Clasifica datos en el DataView
Controls y propiedadesGroupBox1 (Text): FiltrosLabel1 (Text): ProductoTextBox1 (ID): txtProductoLabel2 (Text): CategoriasComboBox (ID): cboCategoriascheckBox1 (ID): ckDescontinuado / Text: Descontinuado
Button1 (ID): btnProductoText: Filtrar
Button2 (ID): btnCategoriaText: Filtrar
Button3 (ID): btnRemoverText: Remover
GroupBox2 (Text): ClasificaciónListBox1 (Text): lstCategoriasButton4 (ID): btnCrecienteText: Creciente
Button5 (ID): btnDecrecienteText: Decreciente
DataGrid1 (ID): dgDatos
Códigos
Imports System.Data.SqlClientPublic Class FormFilterSort Inherits System.Windows.Forms.Form
Protected Const conexion As String = _ "Server=Wind;" & _ "DataBase=Northwind;" & _ "User ID=sa;Password="
Dim DataViewProductos As DataView
Private Sub FormFilterSort_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ArmaCategorias()
Pagina: 21
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
ArmaProductos() Me.myStatusBar.Text = String.Empty End Sub
Sub ArmaCategorias() Try Dim conn As New SqlConnection(conexion) Dim sql As String = "Select CategoryID, CategoryName From Categories" Dim dsCategorias As New DataSet Dim AdapterCategorias As New SqlDataAdapter(sql, conn) conn.Open() AdapterCategorias.Fill(dsCategorias, "Categorias") With Me.cboCategorias .DataSource = dsCategorias.Tables("Categorias").DefaultView .DisplayMember = "CategoryName" .ValueMember = "CategoryID" End With conn.Close() Catch err As SqlException MessageBox.Show(err.Message) Catch err As Exception MessageBox.Show(err.Message) End Try End Sub
Sub ArmaProductos() Dim conn As New SqlConnection(conexion) Dim sql As String = "Select ProductName, UnitPrice, UnitsInStock, UnitsOnOrder, " & _ "CategoryID, Discontinued FROM Products" Dim dsProductos As New DataSet Dim AdapterProductos As New SqlDataAdapter(sql, conn) conn.Open() AdapterProductos.Fill(dsProductos, "Productos") DataViewProductos = New DataView(dsProductos.Tables("Productos"), "ProductName like '%'", "ProductName ASC", DataViewRowState.OriginalRows) conn.Close() Me.dgDatos.DataSource = DataViewProductos Me.dgDatos.CaptionText = "Cantidad Productos: " + DataViewProductos.Count.ToString ' Listado del Productos Dim columna As Integer For columna = 0 To dsProductos.Tables("Productos").Columns.Count - 1 Me.lstCategorias.Items.Add(dsProductos.Tables("Productos").Columns(columna).ColumnName) Next Me.lstCategorias.Sorted = True End Sub
Private Sub btnProducto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProducto.Click Dim strFiltro As String
Pagina: 22
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
If Me.txtProducto.Text.Trim <> "" Then strFiltro = "ProductName LIKE '" & Me.txtProducto.Text.Trim & "%'" FiltraProductos(strFiltro) End If End Sub
Sub FiltraProductos(ByVal strFiltro As String) DataViewProductos.RowFilter = strFiltro Me.dgDatos.DataSource = DataViewProductos If DataViewProductos.Count <= 0 Then Me.dgDatos.CaptionText = "No existen productos con este filtro" Else Me.dgDatos.CaptionText = "Productos filtrados: " + DataViewProductos.Count.ToString End If Me.myStatusBar.Text = strFiltro End Sub
Private Sub btnCategoria_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCategoria.Click Dim strFiltro As String = "CategoryID=" & Me.cboCategorias.SelectedValue FiltraProductos(strFiltro) End Sub
Private Sub ckDescontinuado_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ckDescontinuado.CheckedChanged Dim strFiltro As String If Me.ckDescontinuado.Checked Then strFiltro = "Discontinued=True" Else strFiltro = "Discontinued=False" End If FiltraProductos(strFiltro) End Sub
Private Sub btnCreciente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreciente.Click If Me.lstCategorias.SelectedIndex >= 0 Then DataViewProductos.Sort = Me.lstCategorias.SelectedItem & " ASC" Me.dgDatos.DataSource = DataViewProductos Me.myStatusBar.Text = "Clasificado por " & Me.lstCategorias.SelectedItem & " ASC" End If End Sub
Private Sub btnDecreciente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDecreciente.Click If Me.lstCategorias.SelectedIndex >= 0 Then DataViewProductos.Sort = Me.lstCategorias.SelectedItem & " DESC" Me.dgDatos.DataSource = DataViewProductos
Pagina: 23
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Me.myStatusBar.Text = "Clasificado por " & Me.lstCategorias.SelectedItem & " DESC" End If End Sub
Private Sub btnRemover_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemover.Click Dim strFiltro As String = "ProductName LIKE '%'" FiltraProductos(strFiltro) End SubEnd Class
Pagina: 24
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Entrada Datos
Nombre del formulario: FormEntradaDatosStartPosition: CenterScreenText: Registro de Clientes
Controls y propiedadesGroupBox1 (Text): Datos de RegistroLabel1 (Text): EmpresaIDTextBox1 (ID): txtEmpresaIDLabel2 (Text): EmpresaTextBox2 (ID): txtEmpresaLabel3 (Text): ContactoTextBox3 (ID): txtContactoLabel4 (Text): DirecciónTextBox4 (ID): txtDireccionLabel5 (Text): CiudadTextBox5 (ID): txtCiudadLabel6 (Text): PaísComboBox1 (ID): cboPaisLabel7 (Text): TeléfonoTextBox6 (ID): txtTelefonoLabel8 (Text): FAXTextBox7 (ID): txtFaxButton1 (ID): btnIncluir / Text: IncluirButton2 (ID): btnSalvar / Text: SalvarButton3 (ID): btnExcluir / Text: ExcluirGroupBox2 (Text): Investigación RápidaListBox1 (ID): lstCustomers
Crea un archivo Class Library llamado clsCustomers en la carpeta BancoDatos.
clsCustomers.DLL
Imports System.Data.SqlClientPublic Class clsCustomers
Public Function ArmaClientes(ByVal conexion As String) As DataSet Try Dim conn As New SqlConnection(conexion) Dim sql As String = "Select CustomerID, CompanyName FROM Customers ORDER BY CompanyName" Dim dsCustomers As New DataSet Dim daCustomers As New SqlDataAdapter(sql, conn) conn.Open() daCustomers.Fill(dsCustomers, "Clientes") conn.Close() Return dsCustomers Catch err As SqlException
Pagina: 25
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Throw err Catch err As Exception Throw err End Try End Function Public Function ArmaPaises(ByVal conexion As String) As DataSet Try Dim conn As New SqlConnection(conexion) Dim sql As String = "Select Distinct Country FROM Customers ORDER BY Country" Dim dsPaises As New DataSet Dim daPaises As New SqlDataAdapter(sql, conn) conn.Open() daPaises.Fill(dsPaises, "Paises") conn.Close() Return dsPaises Catch err As SqlException Throw err Catch err As Exception Throw err End Try End Function
Public Sub Incluir(ByVal EmpresaID As String, ByVal Empresa As String, ByVal Contacto As String, _ ByVal Direccion As String, ByVal Ciudad As String, ByVal Telefono As String, _ ByVal Fax As String, ByVal Pais As String, ByVal conexion As String) Try Dim conn As New SqlConnection(conexion) Dim cmd As SqlCommand Dim sqlBuilder As New System.Text.StringBuilder With sqlBuilder .Append("INSERT INTO Customers ") .Append("(CustomerID, CompanyName, ContactName, Address, ") .Append("City, Phone, Fax, Country) ") .Append(" VALUES ('") .Append(EmpresaID & "','") .Append(Empresa & "','") .Append(Contacto & "','") .Append(Direccion & "','") .Append(Ciudad & "','") .Append(Telefono & "','") .Append(Fax & "','") .Append(Pais & "')") End With conn = New SqlConnection(conexion) conn.Open() cmd = New SqlCommand(sqlBuilder.ToString, conn) cmd.ExecuteNonQuery() conn.Close() cmd.Dispose() conn.Dispose() Catch err As SqlException Throw err Catch err As Exception
Pagina: 26
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Throw err End Try End Sub
Public Sub Actualizar(ByVal EmpresaID As String, ByVal Empresa As String, ByVal Contacto As String, _ ByVal Direccion As String, ByVal Ciudad As String, ByVal Telefono As String, _ ByVal Fax As String, ByVal Pais As String, ByVal conexion As String) Try Dim conn As New SqlConnection(conexion) Dim cmd As SqlCommand Dim sqlBuilder As New System.Text.StringBuilder With sqlBuilder .Append("UPDATE Customers SET ") .Append("CompanyName='" & Empresa & "', ") .Append("ContactName='" & Contacto & "', ") .Append("Address='" & Direccion & "', ") .Append("City='" & Ciudad & "', ") .Append("Country='" & Pais & "', ") .Append("Phone='" & Telefono & "', ") .Append("Fax='" & Fax & "' ") .Append("Where CustomerID='" & EmpresaID & "'") End With conn = New SqlConnection(conexion) conn.Open() cmd = New SqlCommand(sqlBuilder.ToString, conn) cmd.ExecuteNonQuery() conn.Close() cmd.Dispose() conn.Dispose() Catch err As SqlException Throw err Catch err As Exception Throw err End Try End Sub
Public Sub Excluir(ByVal EmpresaID As String, ByVal conexion As String) Try Dim conn As New SqlConnection(conexion) Dim cmd As SqlCommand Dim sql As String = "DELETE FROM Customers Where CustomerID='" & EmpresaID & "'" conn = New SqlConnection(conexion) conn.Open() cmd = New SqlCommand(sql, conn) cmd.ExecuteNonQuery() conn.Close() cmd.Dispose() conn.Dispose() Catch err As SqlException Throw err Catch err As Exception Throw err End Try
Pagina: 27
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
End SubEnd Class
Códigos del formulario
Imports System.Data.SqlClient
Public Class FormEntradaDatos Inherits System.Windows.Forms.Form
Protected Const conexion As String = _ "Server=Wind;" & _ "DataBase=Northwind;" & _ "User ID=sa;Password="
Private Mode As String = "Actualizar"
Private Sub FormEntradaDatos_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ArmaClientes() ArmaPaises() End Sub
Private Sub ArmaClientes() Dim clientes As New clsCustomers With Me.lstCustomers .DisplayMember = "CompanyName" .ValueMember = "CustomerID" .DataSource = clientes.ArmaClientes(conexion).Tables("Clientes").DefaultView .SelectedIndex = 0 End With End Sub
Private Sub ArmaPaises() Dim paises As New clsCustomers With Me.cboPais .DisplayMember = "Country" .ValueMember = "Country" .DataSource = paises.ArmaPaises(conexion).Tables("Paises").DefaultView .SelectedIndex = -1 End With End Sub
Private Sub lstCustomers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstCustomers.SelectedIndexChanged If Me.lstCustomers.SelectedIndex >= 0 Then LlenaForm(Me.lstCustomers.SelectedValue) btnExcluir.Enabled = True btnIncluir.Enabled = True btnSalvar.Enabled = True Mode = "Actualizar" End If End Sub
Pagina: 28
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Sub LlenaForm(ByVal idCliente As String) Try Dim conn As New SqlConnection(conexion) Dim sql As String = "Select * FROM Customers Where CustomerID='" & idCliente & "'" Dim dsCustomers As New DataSet Dim drCustomer As SqlDataReader Dim cmd As SqlCommand Dim idPais As String cmd = New SqlCommand(sql, conn) conn.Open() drCustomer = cmd.ExecuteReader If drCustomer.Read() Then Me.txtEmpresaID.Text = drCustomer.Item("CustomerID").ToString Me.txtEmpresa.Text = drCustomer.Item("CompanyName").ToString Me.txtContacto.Text = drCustomer.Item("ContactName").ToString Me.txtDireccion.Text = drCustomer.Item("Address").ToString Me.txtCiudad.Text = drCustomer.Item("City").ToString Me.txtTelefono.Text = drCustomer.Item("Phone").ToString Me.txtFax.Text = drCustomer.Item("Fax").ToString idPais = drCustomer.Item("Country").ToString VerificaPais(drCustomer.Item("Country").ToString) End If drCustomer.Close() conn.Close() cmd.Dispose() conn.Dispose() Catch err As SqlException MessageBox.Show(err.Message) Catch err As Exception MessageBox.Show(err.Message) End Try End Sub Sub VerificaPais(ByVal idPais As String) Dim contador As Integer = 0 Dim paises As New clsCustomers ArmaPaises() For contador = 0 To Me.cboPais.Items.Count - 1 If idPais = Me.cboPais.Items(contador).row(0).ToString Then Me.cboPais.SelectedIndex = contador Exit For End If Next End Sub
Private Sub btnIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluir.Click LimpiarCampos() Mode = "Incluir" btnExcluir.Enabled = False btnIncluir.Enabled = False btnSalvar.Enabled = True End Sub
Pagina: 29
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Sub LimpiarCampos() Me.txtEmpresaID.Text = "" Me.txtEmpresa.Text = "" Me.txtContacto.Text = "" Me.txtDireccion.Text = "" Me.txtCiudad.Text = "" Me.txtTelefono.Text = "" Me.txtFax.Text = "" Me.cboPais.SelectedIndex = -1 End Sub
Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click If Mode = "Incluir" Then IncluirCliente() Else ActualizarCliente() End If End Sub
Sub IncluirCliente() If Not ValidaDatos() Then Exit Sub End If Try Dim objIncluir As New clsCustomers Dim empresaID As String = Me.txtEmpresaID.Text.Trim Dim empresa As String = Me.txtEmpresa.Text.Trim Dim contacto As String = Me.txtContacto.Text.Trim Dim telefono As String = Me.txtTelefono.Text.Trim Dim direccion As String = Me.txtDireccion.Text.Trim Dim ciudad As String = Me.txtCiudad.Text.Trim Dim fax As String = Me.txtFax.Text.Trim Dim pais As String = Me.cboPais.SelectedValue objIncluir.Incluir(empresaID, empresa, contacto, direccion, ciudad, _ telefono, fax, pais, conexion) ArmaClientes() btnSalvar.Enabled = False btnExcluir.Enabled = True btnIncluir.Enabled = True Catch err As Exception MessageBox.Show(err.Message) End Try End Sub Sub ActualizarCliente() If Not ValidaDatos() Then Exit Sub End If Try Dim objActualizar As New clsCustomers Dim empresaID As String = Me.txtEmpresaID.Text.Trim Dim empresa As String = Me.txtEmpresa.Text.Trim Dim contacto As String = Me.txtContacto.Text.Trim Dim telefono As String = Me.txtTelefono.Text.Trim Dim direccion As String = Me.txtDireccion.Text.Trim Dim ciudad As String = Me.txtCiudad.Text.Trim
Pagina: 30
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Dim fax As String = Me.txtFax.Text.Trim Dim pais As String = Me.cboPais.SelectedValue objActualizar.Actualizar(empresaID, empresa, contacto, direccion, ciudad, _ telefono, fax, pais, conexion) btnSalvar.Enabled = True btnExcluir.Enabled = True btnIncluir.Enabled = True Catch err As Exception MessageBox.Show(err.Message) End Try End Sub
Private Function ValidaDatos() As Boolean If txtEmpresaID.Text = "" Or txtEmpresa.Text = "" Or txtContacto.Text = "" Or txtDireccion.Text = "" Or txtCiudad.Text = "" Or txtTelefono.Text = "" Or txtFax.Text = "" Or cboPais.SelectedIndex = -1 Then MessageBox.Show("Por favor, llene todos los datos", "Clientes", MessageBoxButtons.OK) Return False Else Return True End If End Function
Private Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluir.Click Try If MessageBox.Show("¿Está seguro que desea excluir al Cliente?", "Excluir Cliente", MessageBoxButtons.YesNo) = DialogResult.Yes Then Dim empresaID As String = Me.txtEmpresaID.Text.Trim Dim objExcluir As New clsCustomers objExcluir.Excluir(empresaID, conexion) ArmaClientes() LimpiarCampos() btnSalvar.Enabled = True Else btnSalvar.Enabled = False End If Catch err As Exception MessageBox.Show(err.Message) End Try End SubEnd Class
Pagina: 31
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Interoperabilidade
Crear y consumir componente .NET
Cierre todos los proyectos abiertos y cree un nuevo proyecto Class Library llamado Componentes.
Public Class clsAccentos Public Function SinAccentos(ByVal Nombre As String) As String Dim intComp As Integer Dim strSinAccento As String Dim intponteiro As Integer Dim strLetra As String intComp = Len(Nombre) For intponteiro = 1 To intComp strLetra = Mid(Nombre, intponteiro, 1) Select Case strLetra Case "Ä", "Å", "Á", "Â", "À", "Ã" strSinAccento = strSinAccento & "A" Case "ä", "á", "â", "à", "ã" strSinAccento = strSinAccento & "a" Case "É", "Ê", "Ë", "È" strSinAccento = strSinAccento & "E" Case "é", "ê", "ë", "è" strSinAccento = strSinAccento & "e" Case "Í", "Î", "Ï", "Ì" strSinAccento = strSinAccento & "I" Case "í", "î", "ï", "ì" strSinAccento = strSinAccento & "i" Case "Ö", "Ó", "Ô", "Ò", "Õ" strSinAccento = strSinAccento & "O" Case "ö", "ó", "ô", "ò", "õ" strSinAccento = strSinAccento & "o" Case "Ü", "Ú", "Û" strSinAccento = strSinAccento & "U" Case "ü", "ú", "û", "ù" strSinAccento = strSinAccento & "u" Case "Ç" strSinAccento = strSinAccento & "C" Case "ç" strSinAccento = strSinAccento & "c" Case Else strSinAccento = strSinAccento & strLetra End Select Next intponteiro SinAccentos = strSinAccento End FunctionEnd Class
Pagina: 32
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Imports System.Data.SqlClient
Public Class clsProductosPrecios Public Function Categorias() As DataSet Dim conn As SqlConnection Dim sql As String = "SELECT CategoryID, CategoryName FROM Categories ORDER BY CategoryName" Dim da As SqlDataAdapter Dim ds As DataSet conn = New SqlConnection("Initial Catalog=Northwind;Data Source=wind;user id=sa;") conn.Open() da = New SqlDataAdapter(sql, conn) ds = New DataSet da.Fill(ds, "categorias") Return ds End Function
Public Function Precios(ByVal codigo As Integer) As DataSet Dim conn As SqlConnection Dim sql As String Dim da As SqlDataAdapter Dim ds As DataSet sql = "SELECT ProductName + ' (' + LTrim(Str(UnitPrice)) + ')' As Producto, ProductID FROM Products " sql = sql & "Where CategoryID = " & codigo conn = New SqlConnection("Initial Catalog=Northwind;Data Source=wind;user id=sa;") conn.Open() da = New SqlDataAdapter(sql, conn) ds = New DataSet da.Fill(ds, "precios") Return ds End FunctionEnd Class
Seleccione el menú Build / Build Solution para generar la DLL. Abra WinAppLatam. El primer paso consiste en referenciar la DLL que será consumida en el formulario; para ello seleccione el menú Project / Add Reference, localize la DLL generada anteriormente y haga click en el botón OK.Adicione el seguinte formulario para consumir la clase de acentuación generada en la DLL.
Nombre del formulario: FormCompAccentosStartPosition: CenterScreenText: Componente Accentos
Controls y propiedadesLabel1 (Text): OriginalTextBox1 (ID): txtConAcentosMultiline: True
Label2 (Text): Sin Accentos
Pagina: 33
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
TextBox1 (ID): txtSinAccentosMultiline: True
Button1 (Text): Retirar los Accentos
Códigos
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim accentos As New Componentes.clsAccentos Me.txtSinAccentos.Text = accentos.SinAccentos(Me.txtConAccentos.Text)End Sub
Otro formulario.
Nombre del formulario: FormCompProductosStartPosition: CenterScreenText: Consume Componente Productos
Controls y propiedadesLabel1 (Text): CategoriasComboBox1 (ID): cboCategoriasLabel2 (Text): ProductosCheckedListBox: ckProductos
Códigos
Imports ComponentesPublic Class FormCompProductos Inherits System.Windows.Forms.Form
Private Sub FormCompProductos_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim comp As New Componentes.clsProductosPrecios With Me.cboCategorias .DisplayMember = "CategoryName" .ValueMember = "CategoryID" .DataSource = comp.Categorias.Tables("categorias").DefaultView End With End Sub
Private Sub cboCategorias_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboCategorias.SelectedIndexChanged Dim comp As New Componentes.clsProductosPrecios With Me.ckProductos .DisplayMember = "Producto" .ValueMember = "ProductID"
Pagina: 34
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
.DataSource = comp.Precios(Me.cboCategorias.SelectedValue).Tables("precios").DefaultView End With End SubEnd Class
Pagina: 35
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Web Services
Crear y consumir Web Service
Crea un nuevo proyecto del tipo ASP.NET Web Service llamado ProjetoWebServices. Adicione 3 nuevos Web Methods:
Imports System.Web.ServicesImports System.Data.SqlClient
<WebMethod(Description:="Tipos de deportes")> _ Public Function TiposDeportes() As ArrayList Dim ArrayTipos As New ArrayList With ArrayTipos .Add("Agua") .Add("Aire") .Add("Tierra") End With Return ArrayTipos End Function
<WebMethod(Description:="Modalidades de Deportes")> _ Public Function Deportes(ByVal tipo As String) As ArrayList Dim ArrayDeportes As New ArrayList Select Case tipo Case "Agua" With ArrayDeportes .Add("Natación") .Add("Windsurf") .Add("Surf") .Add("Regata Velero") .Add("Regata Océano") End With Case "Aire" With ArrayDeportes .Add("Parapente") .Add("Aladelta") .Add("Aeromodelismo") End With Case "Tierra" With ArrayDeportes .Add("Ciclismo") .Add("Maratona") .Add("Tenis") .Add("Montain Bike") .Add("Voleibol") .Add("Fútbol") .Add("Basquetbol") End With End Select
Pagina: 36
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Return ArrayDeportes End Function
<WebMethod(Description:="Listado de autores")> _ Public Function Autores() As DataSet Dim conn As SqlConnection Dim sql As String = "SELECT au_fname + ' ' + au_lname FROM authors" Dim da As SqlDataAdapter Dim ds As DataSet conn = New SqlConnection("Initial Catalog=Pubs;Data Source=wind;user id=sa;") conn.Open() da = New SqlDataAdapter(sql, conn) ds = New DataSet da.Fill(ds, "autores") Return ds End Function
Nombre del formulario: ConsumeWebServices
Controls y propiedadesLabel2 (Text): TiposListBox1 (ID): lstTiposLabel3 (Text): DeportesListBox1 (ID): lstDeportesLabel4 (Text): AutoresListBox1 (ID): lstAutores
Códigos
Public Class ConsumeWebServices Inherits System.Windows.Forms.Form
Dim ws As New localhost.MS_WebServices
Private Sub ConsumeWebServices_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Tipos de Deportes Me.lstTipos.DataSource = ws.TiposDeportes
'Autores Me.lstAutores.DisplayMember = "Column1" Me.lstAutores.DataSource = ws.Autores.Tables("autores").DefaultView End Sub
Private Sub lstTipos_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstTipos.SelectedIndexChanged ' Arma el Web Service de Deportes según el tipo selecionado Me.lstDeportes.DataSource = ws.Deportes(Me.lstTipos.SelectedValue) End Sub
Pagina: 37
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
End Class
Pagina: 38
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
OOP
Abstracción y Encapsulamiento
Add / Add Class
Nombre de la clase: clsNatacion'*** Abstracción ***Public Class clsNatacion Public Nadador As String Public Tiempo As Integer Public Sub EntrarPiscina() 'código para entrar de la piscina End Sub
Public Sub SalirPiscina() 'codigo para salir de la piscina End SubEnd Class
Nombre de la clase: clsNadadores'Encapsulamiento'Maneras diferentes de escribir una clase (Caja Negra)Public Class clsNadadores Private myNadador As String Private myPrueba As String Public Property Nadador() As String Get Nadador = myNadador End Get Set(ByVal Value As String) myNadador = Value End Set End Property Public Property Prueba() As String Get Prueba = myPrueba End Get Set(ByVal Value As String) myPrueba = Value End Set End Property ReadOnly Property DatosNadador() As String Get DatosNadador = myNadador & " - " & myPrueba End Get End PropertyEnd Class
Pagina: 39
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
'Otra manera de escribir la misma clasePublic Class Nadadores2 Private myNadador As String Private myPrueba As String Private myDatosNadador As String 'nuevo dato Public Property Nadador() As String Get Nadador = myNadador End Get Set(ByVal Value As String) myNadador = Value myDatosNadador = myNadador & " - " & myPrueba End Set End Property Public Property Prueba() As String Get Prueba = myPrueba End Get Set(ByVal Value As String) myPrueba = Value myDatosNadador = myNadador & " - " & myPrueba End Set End Property ReadOnly Property DatosNadador() As String Get DatosNadador = myDatosNadador End Get End PropertyEnd Class
Pagina: 40
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Herencia
Add / Add Class.
Nombre de la clase: clsCarpinteria'*** Herencia ***Public Class clsCarpinteria Private myMaterial As String = "Destornillador" Protected myPresionMinima As Integer = 80 Public Property Material() As String Get Material = myMaterial End Get Set(ByVal Value As String) myMaterial = Value End Set End Property
'El Overridable indica que este elemento puede ser sobrepuesto Public Overridable Function Atornillar(ByVal fuerza As Integer) As Boolean If fuerza > myPresionMinima Then Return True Else Return False End If End FunctionEnd Class
Public Class clsBarco Inherits clsCarpinteria Public Overrides Function Atornillar(ByVal fuerza As Integer) As Boolean If myPresionMinima < 120 Then If fuerza > 100 Then Return True Else Return False End If End If End FunctionEnd Class
Crea un nuevo formulario.
Nombre del formulario: FormOOPControle: ID: btnHerançaText: Herancia – clsCarpinteria
Private Sub btnHerencia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHerencia.Click Dim objCasa As New clsCarpinteria Dim objBarco As New clsBarco
Pagina: 41
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Dim msgCasa, msgBarco As String msgCasa = objCasa.Material & vbNewLine msgCasa += objCasa.Atornillar(67).ToString MessageBox.Show(msgCasa)
msgBarco = objBarco.Material & vbNewLine msgBarco += objBarco.Atornillar(120).ToString MessageBox.Show(msgBarco)End Sub
Add / Add Class.
'*** Herencia ***\Public Class clsAutomovil Private myPeso As Integer Private myColor As String Public Property Peso() As Integer Get Return myPeso End Get Set(ByVal Value As Integer) myPeso = Value End Set End Property Public Property Color() As String Get Return myColor End Get Set(ByVal Value As String) myColor = Value End Set End PropertyEnd Class
Crea un nuevo formulario.
Nombre del formulario: FormCaminhao
Controls y propiedadesLabel1 (Text): Cor:TextBox1 (ID): txtColorLabel2 (Text): Peso:TextBox2 (ID): txtPesoLabel3 (Text): Tipo:TextBox3 (ID): txtTipoButton1 (ID): btnValores / Text: Asignar Valores
Private Sub btnValores_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnValores.Click Dim objCamion As New clsCamion With objCamion .Color = "Amarillo"
Pagina: 42
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
.Peso = 12500 .Tipo = "Camión-Remolque" Me.txtColor.Text = .Color Me.txtPeso.Text = .Peso Me.txtTipo.Text = .Tipo End WithEnd Sub
Pagina: 43
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Polimorfismo
Adicione una nueva clase (Add / Add Class) clsArbitrarPartido.
'*** Polimorfismo ***Public Class clsArbitrarPartido Public Sub SancionarFalta() MessageBox.Show("Sancionar falta en el partido de basquetbol", "Polimorfismo") End SubEnd Class
Public Class clsArbitroFutbol Public Sub SancionarFalta() MessageBox.Show("Sancionar falta en el partido de fútbol", "Polimorfismo") End SubEnd Class
Formulário FormOOP, crea nuevo botón.Button2 (ID): btnPoli / Text: Polimorfismo
Private Sub btnPoli_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPoli.Click Dim objFutbol As New clsArbitroFutbol Dim objBasquetbol As New clsArbitrarPartido Call SancionarFalta(objFutbol) Call SancionarFalta(objBasquetbol)End Sub
Sub SancionarFalta(ByVal obj As System.Object) obj.SancionarFalta()End Sub
Pagina: 44
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Integración del XML
Grabar y leer archivos XML
Nombre del formulario: FormXMLPropiedadesText: Grabar y lerr archivos XMLStartPosition: CenterScreen
Controls y propiedadesButton1 (ID): btnGrabar / Text: Grabar XMLButton2 (ID): btnLeer / Text: Leer PedidosButton3 (ID): btnProductos / Text: Leer ProductosDataGrid1 (ID): dgDatos
Crea respectivos DataSets
Códigos
Public Class FormXML Inherits System.Windows.Forms.Form
Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrabar.Click 'Graba XML Files Try Me.daPedidos.Fill(Me.DsPedidos1.Orders) Me.daProductos.Fill(Me.DsProductos1.Products) Me.DsPedidos1.WriteXml("PedidosXML.xml") Me.DsProductos1.WriteXml("ProductosXML.xml") MessageBox.Show("Archivos XML generados con éxito !!!", "MS XML") Catch err As Exception MessageBox.Show("Ocurrió el error: " & err.Message) End Try End Sub
Private Sub btnLeer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLeer.Click Try ArmaGrid("PedidosXML.xml") Catch err As Exception MessageBox.Show("Ocurrió el error: " & err.Message) End Try End Sub
Sub ArmaGrid(ByVal archivo As String) Try
Pagina: 45
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Dim newDS As New DataSet newDS.ReadXml(archivo) Me.dgDatos.DataSource = newDS Me.dgDatos.DataMember = newDS.Tables(0).TableName Me.dgDatos.CaptionText = "Cantidad ítens: " & newDS.Tables(0).Rows.Count Catch Throw End Try End Sub
Private Sub btnProductos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProductos.Click Try ArmaGrid("ProductosXML.xml") Catch err As Exception MessageBox.Show("Ocurrió el error: " & err.Message) End Try End SubEnd Class
Pagina: 46
Desarrollando Aplicaciones Windows con Visual Basic . NetAutor: Renato I. Haddad (Microsoft Most Valuable Professional)
Threads
Nombre del formulario: FormThread
Controls y propiedadesButton1 ( ID): btnArcTexto / Text: Inicia la grabación del archivo textoButton2 ( ID): btnMsg / Text: Envía un Message Box
Private Sub btnArcTexto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnArcTexto.Click Dim objThread As New System.Threading.Thread(AddressOf Me.CreaArchivo) objThread.Start()End Sub
Sub CreaArchivo() Dim objArc As New System.IO.FileStream("c:\WinAppLatam\thread.txt", IO.FileMode.OpenOrCreate) Dim arc As New System.IO.StreamWriter(objArc) Dim aux1, aux2 As Integer For aux1 = 1 To 500 For aux2 = 1 To 500 arc.WriteLine(aux1.ToString & " - " & aux2.ToString) Next Next arc.Close() MessageBox.Show("Finalizó la grabación del archivo", "MS")End Sub
Private Sub btnMsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMsg.Click MessageBox.Show("Mensaje emitido al usuario", "MS")End Sub
Pagina: 47