Você está na página 1de 47

Desarrollando Aplicaciones Windows con Visual Basic .

Net
Autor: 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 . Net
Autor: 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: frmRestaurante


Propiedades
Text: Arme su plato preferido !!!
StartPosition: CenterScreen

Controls y propiedades
Label1 (Text): Plato:
TextBox: txtNombrePlato

Label2 (Text): Ingredientes:


ListBox: lstIngredientes

Button1 (ID): btnAnadir


Text: Añadir >>

Button2 (ID): btnExcluir


Text: Excluir <<

Button3 (ID): btnNuevo


Text: Nuevo Plato

Button4 (ID): btnEspecial


Text: Especial

Label3 (Text): Plato:


ListBox: lstPlato

GroupBox (Name): gpLocal


Text: Local
2 RadioButtons

GroupBox (Name): gpEnvase


Text: Envase

Pagina: 2
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

3 CheckBox

GroupBox (Name): gpBebidas


Text: Bebidas
4 CheckBox

Button5 (ID): btnFinalizar


Text: 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 = False
End 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 If
End 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)
End If

Pagina: 3
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

End 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 If
End 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 If
End 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 If
End 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 If
End Sub

Pagina: 4
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Controls (2)

Nombre del formulario: FormMenu


Propiedades
Text: FormMenu

Controls y propiedades
MainMenu: armar el menú con las opciones:
Archivo: Leer archivo texto / Salir
Configurar: 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): lblCuadros
Text: Cuadros de Diálogo

ListBox (ID): lstSoftwares

Button1 (ID): btnColores


Text: Colores

Button2 (ID): btnFuente


Text: Fuente

En la pagina Hardwares:

TextBox1 (ID): txtArchivo


Multiline: True
ScrollBars: Both

Button3 (ID): btnArchivo


Text: 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 . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Dim softwares() As String = {"Word", "Excel", "Access", "Power


Point", _
"VS.NET", "Visio"}
Me.lstSoftwares.DataSource = softwares
End 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 If
End 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 If
End 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 If
End Sub

Pagina: 6
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: 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 = blnStatus
End 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 = msg
End Sub

Pagina: 7
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Gráficos (GDI+)

Nombre del formulario: GDI


Propiedades
Text: GDI

Controls y propiedades

Button1 (ID): Button1


Text: Elipse

Button2 (ID): Button2


Text: Drawing

TrackBar1
Maximum: 100
Minimum: 10
Value: 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 . Net
Autor: 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 . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Herencia de formulario

Nombre del formulario: BaseHerencia


Propiedades
Text: Calcula Impuesto a la Renta

Controls y propiedades

Label1 (Text): Nombre:


TextBox (ID): txtNombre
Label2 (Text): Salario:
TextBox (ID): txtSalario

Button1 (ID): btnNombre


Text: Verifica Nombre

Button2 (ID): btnIR


Text: Calcula Impuesto a la Renta

Label3 (ID): lblResultado


Text: 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 If
End 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 If
End 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 . Net
Autor: 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 Select
End 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 If
End Sub

Nombre del formulario: FormHereda1

Public Class FormHereda1


Inherits WinAppLatam.BaseHerencia
End Class

Nombre del formulario: FormHereda2


Adicione 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): txtHE
Label4 (Text): Ingreso Extra:
TextBox (ID): txtExtra

Button1 (ID): btnNuevoImpuesto


Text: Calcula IR con extras

Label5 (ID): lblNuevoImpuesto

Códigos

Pagina: 11
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: 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 . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

MDI / Modal

Nombre del formulario: FormMDI_padre


Propiedades
Text: FormMDI_padre
IsMdiContainer: True

Controls y propiedades

Button2 (ID): btnAbre


Text: Abre MDI Forms

1 GroupBox com 3 checkBox


Text: Layout
Text dos checkboxes: Cascate / Horizontal / Vertical

Button1 (ID): Button1


Text: 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 Select
End 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 . Net
Autor: 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_Hijo1


Propiedades
Text: FormMDI_Hijo1
AcceptButton: btnOK
CancelButton: btnCancel

Controls y propiedades

Label1 (Text): Suscripción MSDN:


TextBox1
Button1 (Text): Suscripción:
Button2 (ID): btnOK
Button3 (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_Hijo2


Propiedades
Text: FormMDI_Hijo2

Controls y propiedades

Label1 e DataGrid

Pagina: 14
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Tratamiento de Errores
Try / Catch / Finally

Nombre del formulario: FormError

Controls y propiedades
Button1 (ID): btnArchivo
Text: Abre el archivo texto

TextBox: txtArchivo
ScrollBars: 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 Try
End Sub

Pagina: 15
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

ADO .NET
Llenando Controls

Nombre del formulario: DB_LlenandoControls


StartPosition: CenterScreen

Controls y propiedades
Label1 (Text): ID:
TextBox1 (ID): txtID
Label2 (Text): ID:
TextBox2 (ID): txtNombre
Label3 (Text): ID:
TextBox3 (ID): txtContacto
Label4 (Text): ID:
TextBox4 (ID): txtCargo
Label5 (Text): Ciudad:
TextBox1 (ID): txtCiudad

Button1 (ID): btnTop


Text: <<

Button2 (ID): btnPrevious


Text: <

TextBox6 (ID): txtNavegador

Button3 (ID): btnNext


Text: >

Button4 (ID): btnBottom


Text: >>

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 . Net
Autor: 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.ToString
End 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 With
End 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 . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

ActualizaDatos()
End If
End With
End 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 With
End Sub

Pagina: 18
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Relacionamientos

Nombre del formulario: DB_Relacionamientos


StartPosition: CenterScreen

Controls y propiedades
Button1 (ID): btnCon
Text: DataGrid Con Relacionamiento

Button2 (ID): btnSin


Text: 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 Try
End 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 . Net
Autor: 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 Try
End Sub

Pagina: 20
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Filtros y Clasificación

Nombre del formulario: FormFilterSort


StartPosition: CenterScreen
Text: Aplica Filtro y Clasifica datos en el DataView

Controls y propiedades
GroupBox1 (Text): Filtros
Label1 (Text): Producto
TextBox1 (ID): txtProducto
Label2 (Text): Categorias
ComboBox (ID): cboCategorias
checkBox1 (ID): ckDescontinuado / Text: Descontinuado

Button1 (ID): btnProducto


Text: Filtrar

Button2 (ID): btnCategoria


Text: Filtrar

Button3 (ID): btnRemover


Text: Remover

GroupBox2 (Text): Clasificación


ListBox1 (Text): lstCategorias
Button4 (ID): btnCreciente
Text: Creciente

Button5 (ID): btnDecreciente


Text: Decreciente

DataGrid1 (ID): dgDatos

Códigos

Imports System.Data.SqlClient
Public 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 . Net
Autor: 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
If Me.txtProducto.Text.Trim <> "" Then

Pagina: 22
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

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
Me.myStatusBar.Text = "Clasificado por " &
Me.lstCategorias.SelectedItem & " DESC"

Pagina: 23
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

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 Sub
End Class

Pagina: 24
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Entrada Datos

Nombre del formulario: FormEntradaDatos


StartPosition: CenterScreen
Text: Registro de Clientes

Controls y propiedades
GroupBox1 (Text): Datos de Registro
Label1 (Text): EmpresaID
TextBox1 (ID): txtEmpresaID
Label2 (Text): Empresa
TextBox2 (ID): txtEmpresa
Label3 (Text): Contacto
TextBox3 (ID): txtContacto
Label4 (Text): Dirección
TextBox4 (ID): txtDireccion
Label5 (Text): Ciudad
TextBox5 (ID): txtCiudad
Label6 (Text): País
ComboBox1 (ID): cboPais
Label7 (Text): Teléfono
TextBox6 (ID): txtTelefono
Label8 (Text): FAX
TextBox7 (ID): txtFax
Button1 (ID): btnIncluir / Text: Incluir
Button2 (ID): btnSalvar / Text: Salvar
Button3 (ID): btnExcluir / Text: Excluir
GroupBox2 (Text): Investigación Rápida
ListBox1 (ID): lstCustomers

Crea un archivo Class Library llamado clsCustomers en la carpeta BancoDatos.

clsCustomers.DLL

Imports System.Data.SqlClient
Public 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 . Net
Autor: 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 . Net
Autor: 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 . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

End Sub
End 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 . Net
Autor: 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 . Net
Autor: 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 . Net
Autor: 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 Sub
End Class

Pagina: 31
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: 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 Function
End Class

Imports System.Data.SqlClient

Pagina: 32
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

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 Function
End 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: FormCompAccentos


StartPosition: CenterScreen
Text: Componente Accentos

Controls y propiedades
Label1 (Text): Original
TextBox1 (ID): txtConAcentos
Multiline: True

Label2 (Text): Sin Accentos

Pagina: 33
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

TextBox1 (ID): txtSinAccentos


Multiline: 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: FormCompProductos


StartPosition: CenterScreen
Text: Consume Componente Productos

Controls y propiedades
Label1 (Text): Categorias
ComboBox1 (ID): cboCategorias
Label2 (Text): Productos
CheckedListBox: ckProductos

Códigos

Imports Componentes
Public 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 . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

.DataSource =
comp.Precios(Me.cboCategorias.SelectedValue).Tables("precios").DefaultV
iew
End With
End Sub
End Class

Pagina: 35
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: 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.Services
Imports 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
Return ArrayDeportes

Pagina: 36
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

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 propiedades
Label2 (Text): Tipos
ListBox1 (ID): lstTipos
Label3 (Text): Deportes
ListBox1 (ID): lstDeportes
Label4 (Text): Autores
ListBox1 (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
End Class

Pagina: 37
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Pagina: 38
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: 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 Sub
End 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 Property
End Class

'Otra manera de escribir la misma clase

Pagina: 39
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Public 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 Property
End Class

Pagina: 40
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: 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 Function
End 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 Function
End Class

Crea un nuevo formulario.

Nombre del formulario: FormOOP


Controle:
ID: btnHerança
Text: 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 . Net
Autor: 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 Property
End Class

Crea un nuevo formulario.

Nombre del formulario: FormCaminhao

Controls y propiedades
Label1 (Text): Cor:
TextBox1 (ID): txtColor
Label2 (Text): Peso:
TextBox2 (ID): txtPeso
Label3 (Text): Tipo:
TextBox3 (ID): txtTipo
Button1 (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 . Net
Autor: 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 With
End Sub

Pagina: 43
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: 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 Sub
End Class

Public Class clsArbitroFutbol


Public Sub SancionarFalta()
MessageBox.Show("Sancionar falta en el partido de fútbol",
"Polimorfismo")
End Sub
End 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 . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Integración del XML


Grabar y leer archivos XML

Nombre del formulario: FormXML


Propiedades
Text: Grabar y lerr archivos XML
StartPosition: CenterScreen

Controls y propiedades
Button1 (ID): btnGrabar / Text: Grabar XML
Button2 (ID): btnLeer / Text: Leer Pedidos
Button3 (ID): btnProductos / Text: Leer Productos
DataGrid1 (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
Dim newDS As New DataSet

Pagina: 45
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

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 Sub
End Class

Pagina: 46
Desarrollando Aplicaciones Windows con Visual Basic . Net
Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Threads
Nombre del formulario: FormThread

Controls y propiedades
Button1 ( ID): btnArcTexto / Text: Inicia la grabación del archivo texto
Button2 ( 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