You are on page 1of 32

Captulo 20

Consejos y Trucos
para el
desarrollador de
Visual Basic .NET
En este captulo aprender a:
Crear dinmicamente controles
Windows.
Gestionar y trabajar con arrays.
Programar aplicaciones que utilicen la impresora.
Utilizar el control ColorDialog.
Utilizar tcnicas de arrastrar y soltar (Drag & Drop).
Volcar datos XML en el control
DataGrid.
Programar aplicaciones que utilicen el control ListBox.
Conocer la versin de Microsoft
.NET Framework instalada en un
sistema.

410 Captulo 20

Introduccin
Este libro de programacin avanzada de Visual Basic .NET, nos ofrece los
aspectos avanzados sobre la programacin de Visual Basic .NET abordando algunas de las caractersticas poco corrientes para el programador,
orientndolo en la prctica.
Evidentemente, no es muy amplio el espacio del libro que se dispone
para hablar de tantas cosas nuevas y anteriores aunque mejoradas y
aspectos avanzados para el desarrollador, y por eso, se ha decidido
preparar este captulo, dedicado a introducir pequeas porciones de
cdigo que sirvan de utilidad para los desarrolladores de aplicaciones
de Visual Basic .NET, donde veremos y aprenderemos a trabajar con las
utilidades ms habituales.

Figura 20.1. Ventana de la aplicacin con los controles insertados

Un captulo que espero sirva de ayuda y apoyo al programador de aplicaciones de Visual Basic .NET.

Creacin dinmica de controles


Una de las opciones que ms suelen utilizar los programadores de Visual
Basic avanzado, es la posibilidad de crear dinmicamente controles.

Consejos y trucos para el desarrolador de Visual Basic .NET 411


Los controles dinmicos en versiones anteriores de Visual Basic, se creaban de una forma diferente a la que se utiliza en Visual Basic .NET. Adems, en Visual Basic .NET no existe el concepto de array de controles que
exista en versiones anteriores de Visual Basic. En el siguiente cdigo,
mostraremos cmo crear controles de forma dinmica en nuestras aplicaciones, efecto ste, que puede resultar especialmente til.
Inicialmente, aadiremos a nuestro formulario web un control Button y
lo dispondremos en la ventana como deseemos. Como ejemplo, utilizaremos el que aparece en la figura 20.1.
El cdigo de nuestra aplicacin que se encarga de realizar las operaciones
necesarias para insertar los controles de forma dinmica en un formulario
es el que se detalla a continuacin:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
'Declaramos la caja de texto
Dim MiCajaDeTexto As New TextBox()
'Comenzamos a aadir los valores y propiedades
'a la caja de texto
With MiCajaDeTexto
'Texto
.Text = "Texto de ejemplo"
'Nombre
.Name = "MiCajaDeTexto"
'Posicin en el formulario (coordenadas X,Y)
.Location = New Point(10, 10)
'Tamao del control
.Size = New Size(140, 40)
'Fuente del control
.Font = New Font("Verdana", 8, FontStyle.Bold)
'Color de fondo
.BackColor = Color.Aqua
'Color del texto
.ForeColor = Color.DarkBlue
End With
'Aadimos el control
Controls.Add(MiCajaDeTexto)
Button1.Tag = MiCajaDeTexto
End Sub
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Modificamos en la caja de texto creada
'dinmicamente, su contenido
CType(Button1.Tag, TextBox).Text = "Otro texto"
End Sub

412 Captulo 20
El cdigo es muy fcil de entender. Al iniciar nuestro formulario, creamos
un control TextBox con un conjunto de propiedades que hemos modificado inicialmente.
Posteriormente, cuando pulsamos el botn, somos capaces de cambiar el
texto del control creado dinmicamente.
Estas operaciones complejas, requieren algo de habilidad y el uso de la
propiedad Tag del control Button que hemos utilizado para recuperar
el identificador del control TextBox.

Provocando un punto de ruptura


en la depuracin
A veces puede resultarnos especialmente til provocar puntos de ruptura
en cdigo dentro de nuestra aplicacin. Esto lo podemos conseguir usando una clase variante del nombre de espacio System que est preparada
para realizar este tipo de operaciones. La siguiente clase, ejecuta un punto de interrupcin o ruptura en el depurador:
System.Diagnostics.Debugger.Break()

Por otro lado, existe otra clase que se encarga de iniciar el depurador
asocindolo al proceso. Para ello, haremos uso de la siguiente clase:
System.Diagnostics.Debugger.Launch()

Por ltimo, otra clase de utilidad, es la clase que se encarga de enviar un


mensaje al depurador correspondiente. Esto se consigue de la siguiente
manera:
System.Diagnostics.Debugger.Log()

Como prueba, aada una porcin de cdigo y escriba por ejemplo, la


primera clase comentada entre medias de las sentencias de Visual Basic
.NET y pulse el botn F5 de ejecucin de la aplicacin.

Trabajando con fechas


Una pregunta comn para el desarrollador de aplicaciones Windows y
por supuesto, para los desarrolladores de aplicaciones con Visual Basic

Consejos y trucos para el desarrolador de Visual Basic .NET 413


.NET, es la pregunta que tiene que ver con el trabajo con fechas. Muchas
veces nos encontramos con problemas a la hora de trabajar con fechas y
esto es lo que tratamos o queremos tratar de solventar en este apartado.
De hecho, trabajaremos con un ejemplo en el que insertaremos en el formulario un control Button y escribiremos el siguiente cdigo fuente
asociado a la aplicacin:
Private MiFecha As DateTime
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
MiFecha = Now
End Sub
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Mostramos la diferencia entre una fecha/hora inicial
'y otra fecha/hora final, mostrando los valores en
'diferentes formatos (horas, minutos, segundos)
MessageBox.Show("Duracin: " & _
Now.Subtract(MiFecha).Duration.ToString & vbCrLf & _
"Horas: " & CInt(Now.Subtract(MiFecha).TotalHours) &
vbCrLf & _
"Minutos: " & CInt(Now.Subtract(MiFecha).TotalMinutes)
& vbCrLf & _
"Segundos: " &
CInt(Now.Subtract(MiFecha).TotalSeconds))
End Sub

Nuestro ejemplo en ejecucin es el que se muestra en la figura 20.2.

Figura 20.2. Ejecucin del ejemplo de diferencias de fechas

Sin embargo, el trabajo de fechas no se reduce nicamente a la posibilidad


de trabajar con clculos de fechas. Tambin es posible que dentro de una

414 Captulo 20
fecha de sistema determinada, deseemos recoger parte de su informacin,
por ejemplo, el tiempo o la fecha del calendario propiamente dicha.
El ejemplo siguiente soluciona esta duda. Aprovechando la interfaz de
diseo del ejemplo anterior, escribiremos el siguiente cdigo fuente asociado a nuestra aplicacin:
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Mostramos una fecha/hora en diferentes formatos
MessageBox.Show(FormatDateTime(Now,
DateFormat.GeneralDate) & vbCrLf & _
FormatDateTime(Now, DateFormat.LongDate) & vbCrLf & _
FormatDateTime(Now, DateFormat.LongTime) & vbCrLf & _
FormatDateTime(Now, DateFormat.ShortDate) & vbCrLf & _
FormatDateTime(Now, DateFormat.ShortTime))
End Sub

Nuestro ejemplo en ejecucin es el que se muestra en la figura 20.3.

Figura 20.3. Ejecucin del ejemplo de uso de fechas y horas

Estas operaciones de trabajo con fechas y horas, suelen ser de uso frecuente
en las aplicaciones Windows. Adicionalmente, podemos necesitar realizar
otras operaciones, pero stas que hemos visto, suelen ser habituales.

Trabajando con arrays


Los arrays o matrices, son elementos que ayudan a resolver muchas tareas para el desarrollador. En este apartado, veremos cmo crear diferentes arrays o matrices con Visual Basic .NET.

Consejos y trucos para el desarrolador de Visual Basic .NET 415


En .NET Framework, se han introducido un conjunto de clases y mtodos
muy tiles, y estos afectan igualmente a las operaciones que podemos realizar para trabajar con matrices. De hecho, el siguiente cdigo que vamos a
analizar, se encarga de crear una matriz al principio de la aplicacin y de
aadir la posibilidad de recorrerla, mostrando sus valores, y ordenndolos
automticamente tanto de menor a mayor como de mayor a menor.
El cdigo de nuestro ejemplo, es el que se detalla a continuacin:
Dim strMiArray() As String = {"Elemento 7", "Elemento 5",
"Elemento 3", "Elemento 2", "Elemento 1", "Elemento 6",
"Elemento 4"}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
Mostrar_Datos(strMiArray)
End Sub
Private Sub Mostrar_Datos(ByVal miArray As Array)
Dim I As Integer
Dim strDatos As String
MessageBox.Show("Se va a analizar un Array de " &
miArray.Rank & IIf(miArray.Rank < 2, " dimensin", "
dimensiones"))
'Mostramos los valores como los tenemos declarados
For I = 0 To (miArray.Length - 1)
strDatos = strDatos & miArray.GetValue(I) & vbCrLf
Next
MessageBox.Show(strDatos)
strDatos = ""
'Ordenamos el Array
Array.Sort(miArray)
'Mostramos los valores despus de la ordenacin
For I = 0 To (miArray.Length - 1)
strDatos = strDatos & miArray.GetValue(I) & vbCrLf
Next
MessageBox.Show(strDatos)
strDatos = ""
'Volvemos a ordenar el Array de forma inversa
Array.Reverse(miArray)
'Volvemos a mostrar los valores despus de la
ordenacin
For I = 0 To (miArray.Length - 1)
strDatos = strDatos & miArray.GetValue(I) & vbCrLf
Next
MessageBox.Show(strDatos)
End Sub

Aunque este ejemplo nos permite mostrar los datos de la matriz en pantalla, tambin podemos agregar ms posibilidades al trabajo con matrices.

416 Captulo 20
De hecho, se nos ocurre la posibilidad de incrementar una matriz
dinmicamente, aadiendo nuevos datos.
Esta operacin comn tambin por su uso, en los desarrollos de aplicaciones, quedara resuelta analizando el siguiente cdigo fuente, que lleva a
cabo esta operacin:
Dim strMiArray() As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
ReDim strMiArray(2)
strMiArray(0) = "0"
strMiArray(1) = "1"
strMiArray(2) = "2"
End Sub
Private Sub Mostrar_Datos(ByVal miArray As Array)
Dim I As Integer
Dim strDatos As String
'Mostramos los valores como los tenemos declarados
For I = 0 To (miArray.Length - 1)
strDatos = strDatos & miArray.GetValue(I) & vbCrLf
Next
MessageBox.Show(strDatos)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Guardamos el valor de la longitud del array
Dim intValor As Integer = strMiArray.Length
'redimensionamos el array preservando los valores
existentes
ReDim Preserve strMiArray(intValor)
'Aadimos un nuevo valor
strMiArray(intValor) = intValor
'Mostramos los valores del array
Mostrar_Datos(strMiArray)
End Sub

En este segundo ejemplo, hemos visto cmo crear arrays o matrices


dinmicamente, los cuales pueden resultarnos especialmente tiles en
algunos desarrollos de aplicaciones.

Trabajando con el portapapeles


El portapapeles, nos da sin embargo mucho juego. En este primer ejemplo, trabajaremos con el portapapeles para mostrar una imagen en un

Consejos y trucos para el desarrolador de Visual Basic .NET 417


control PictureBox, por lo que en nuestro ejemplo, aadiremos al formulario un control PictureBox y un control Button, y aadiremos
una imagen al directorio de nuestra aplicacin. El cdigo de nuestra aplicacin es el que se detalla a continuacin:
'La aplicacin se ejecuta en el directorio bin, por lo
'que es necesario bajar un nivel y recoger la imagen
Dim MiImagen As New System.Drawing.Bitmap("..\Imagen.jpg")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
'Copiamos al portapapeles la imagen
Dim Objeto_de_Datos As New DataObject()
Objeto_de_Datos.SetData(DataFormats.Bitmap, True,
MiImagen)
Clipboard.SetDataObject(Objeto_de_Datos, True)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Si hay datos en el portapapeles
If Not (Clipboard.GetDataObject() Is Nothing) Then
'Vaciamos el control PictureBox1
PictureBox1.Image = Nothing
'Declaramos un objeto y le asignamos el valor del
portapapeles
Dim Objeto_de_Datos As Object
Objeto_de_Datos =
Clipboard.GetDataObject().GetData("Bitmap")
Try
'Mostramos la imagen
PictureBox1.Image = CType(Objeto_de_Datos,
Image)
Catch ex As Exception
'Si hay error vaciamos el control PictureBox1
PictureBox1.Image = Nothing
End Try
End If
End Sub

En este ejemplo, hemos podido ver cmo aadir una imagen al portapapeles
y cmo recuperarla al hacer clic sobre el botn. Nuestra aplicacin en ejecucin despus de recuperar el contenido de la imagen del portapapeles, es el
que puede verse en la figura 20.4. Este mismo cdigo puede ser simplificado accediendo directamente al portapapeles. El cdigo anterior por tanto,
podra quedar como se detalla a continuacin:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load

418 Captulo 20
'La aplicacin se ejecuta en el directorio bin, por lo
'que es necesario bajar un nivel y recoger la imagen
Dim MiImagen As New
System.Drawing.Bitmap("..\Imagen.jpg")
'Copiamos al portapapeles la imagen
Dim Objeto_de_Datos As New DataObject()
Objeto_de_Datos.SetData(DataFormats.Bitmap, True,
MiImagen)
Clipboard.SetDataObject(Objeto_de_Datos, True)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Si hay datos en el portapapeles
If Not (Clipboard.GetDataObject() Is Nothing) Then
'Vaciamos el control PictureBox1
PictureBox1.Image = Nothing
Try
'Mostramos la imagen
PictureBox1.Image =
Clipboard.GetDataObject().GetData("Bitmap")
Catch ex As Exception
'Si hay error vaciamos el control PictureBox1
PictureBox1.Image = Nothing
End Try
End If
End Sub

Figura 20.4. Ejecucin del ejemplo de uso de fechas y horas

En este caso, hemos reducido el cdigo un poco y hemos declarado alguna variable en otro lugar, cambiando la ubicacin de declaracin.
Ahora bien, quizs nuestro deseo sea el de mostrar texto. En este
caso, recuperar los datos de texto del portapapeles es igualmente
fcil.

Consejos y trucos para el desarrolador de Visual Basic .NET 419


El cdigo ms habitual similar al visto anteriormente comentado, es el
siguiente:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load
'Copiamos al portapapeles el texto
Dim Objeto_de_Datos As New DataObject()
Objeto_de_Datos.SetData(DataFormats.Text, True, "Texto
a copiar")
Clipboard.SetDataObject(Objeto_de_Datos, True)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Si hay datos en el portapapeles
If Not (Clipboard.GetDataObject() Is Nothing) Then
'Vaciamos el control TextBox1
TextBox1.Text = Nothing
Try
'Mostramos el texto
TextBox1.AppendText(Clipboard.GetDataObject()
.GetData("Text"))
Catch ex As Exception
'Si hay error vaciamos el control TextBox1
TextBox1.Text = Nothing
End Try
End If
End Sub

En esta porcin de cdigo, debemos comentar que la recuperacin de


texto puede realizarse con estas cuatro sentencias:
TextBox1.Text =
Clipboard.GetDataObject().GetData("System.String")
TextBox1.Text = Clipboard.GetDataObject().GetData("Text")
TextBox1.AppendText(Clipboard.GetDataObject().GetData("Text"))
TextBox1.AppendText(Clipboard.GetDataObject()
.GetData("System.String"))

En este apartado, hemos visto cmo trabajar con las operaciones de


portapapeles ms comunes, el tratamiento de datos de texto y el tratamiento de datos de imagen.

Captura de las impresoras


Otra de las operaciones tpicas de todo programador, es el trabajo con
operaciones de entrada y salida, y entre ellas, el trabajo con la impre-

420 Captulo 20
sora, ese dispositivo que tantos quebraderos de cabeza da al programador.
La primera porcin de cdigo que vamos a presentar, ser la posibilidad
de mostrar todas las impresoras instaladas en el sistema.
El cdigo de esta utilidad, es el siguiente, suponiendo que hemos insertado en el formulario un control ListBox:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
Dim strImpresoras As String
ListBox1.Items.Clear()
For Each strImpresoras In
System.Drawing.Printing.PrinterSettings.InstalledPrinters
ListBox1.Items.Add(strImpresoras)
Next
End Sub

Truco
Podemos utilizar el nombre de espacio de acceso a las impresoras
instaladas en el sistema o bien el complemento PrintDocument.
En este caso, accederamos a las impresoras instaladas en el
sistema mediante la llamada a PrintDocument1.PrinterSettings
.PrinterName.
A continuacin, veremos otros ejemplos diferentes de trabajo con otras
funciones de inters general para el programador.

Mostrar colores en el componente


ColorDialog
El componente ColorDialog nos servir de utilidad para capturar colores de la paleta de colores del sistema, sin embargo, tambin podemos
insertar nuestros colores personalizados, y eso lo conseguiremos mediante cdigo.
De momento, insertaremos en nuestro formulario un componente
ColorDialog y un control Label y un control Button, tal y como se
muestra en la figura 20.5.

Consejos y trucos para el desarrolador de Visual Basic .NET 421

Figura 20.5. Interfaz con el componente ColorDialog insertado


en el formulario

A continuacin, escribiremos el cdigo de la aplicacin que se encarga de


realizar esta tarea y que es el que se detalla a continuacin:
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Preparamos un array de colores personalizados
'que volcaremos en el componente ColorDialog
Dim Array_Colores() As Integer = {RGB(255, 125, 0),
RGB(0, 255, 125), RGB(125, 0, 255)}
With ColorDialog1
'Recuperamos el color
.Color = Label1.BackColor
'Volcamos los colores personalizados
.CustomColors = Array_Colores
'No permitimos crear colores personalizados
.AllowFullOpen = False
'Mostramos los colores bsicos
.AnyColor = True
'Obligamos a utilizar colores slidos

422 Captulo 20
.SolidColorOnly = True
'Abrimos la ventana de seleccin de
'colores; Si se selecciona un color
'se pinta el objeto con ese color
If .ShowDialog() = DialogResult.OK Then
Label1.BackColor = .Color
End If
'Limpiamos el componente de colores
'para poder utilizarlo nuevamente
'recargando todos los colores
.Reset()
End With
End Sub

En este ejemplo, seleccionamos un color y lo cargamos en el formulario.


Varias opciones de este control, nos permite introducir datos e informacin de inters sobre los colores.

Uso de Drag & Drop


El efecto de arrastrar y soltar es muy comn en aplicaciones de gestin y
facilita mucho algunas tareas muy comunes como pasar informacin de
un control a otro.
Insertaremos en un formulario, dos controles TextBox y modificaremos
la propiedad AllowDrop a True.
El cdigo de nuestro ejemplo de arrastrar y soltar es el siguiente:
Const CtrlMask As Byte = 8
Private Sub TextBox1_MouseDown(ByVal sender As
System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Handles TextBox1.MouseDown
'Si el botn del ratn es el izquierdo...
If e.Button = MouseButtons.Left Then
'Seleccionamos todo el texto
TextBox1.SelectAll()
'llamamos al procedimiento de la operacin de
arrastrar y soltar
TextBox1.DoDragDrop(TextBox1.SelectedText,
DragDropEffects.Move Or DragDropEffects.Copy)
End If
End Sub
Private Sub TextBox2_DragDrop(ByVal sender As
System.Object, ByVal e As System.Windows.Forms.DragEventArgs)
Handles TextBox2.DragDrop

Consejos y trucos para el desarrolador de Visual Basic .NET 423


'Soltamos el contenido en el control TextBox2
TextBox2.Text =
e.Data.GetData(DataFormats.Text).ToString
'Si la tecla Ctrl no est pulsada, hace un efecto de
mover
If (e.KeyState And CtrlMask) <> CtrlMask Then
TextBox1.Text = ""
End If
End Sub
Private Sub TextBox2_DragEnter(ByVal sender As
System.Object, ByVal e As System.Windows.Forms.DragEventArgs)
Handles TextBox2.DragEnter
If (e.Data.GetDataPresent(DataFormats.Text)) Then
'Si la tecla Ctrl no est pulsada, hace un efecto
de mover
If (e.KeyState And CtrlMask) = CtrlMask Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.Move
End If
Else
e.Effect = DragDropEffects.None
End If
End Sub

Este efecto de arrastrar y soltar es muy til para desarrollo de aplicaciones en los que se requiera operaciones rpidas y efectivas de mover datos
entre controles.

Volcar datos XML a un control DataGrid


En este ejemplo, veremos cmo trabajar con datos XML y cmo volcarlos
directamente a un control DataGrid. En nuestro caso, hemos decidido
crear un documento XML y aadirlo a nuestro proyecto.
Una vez tenemos aadido el documento XML a nuestro proyecto, tendremos que leer su informacin de alguna manera para volcarla al control
DataGrid.
El documento XML contiene la siguiente informacin:
Alumnos.xml
<?xml version="1.0" encoding="utf-8" ?>
<Alumnos>
<alumno>

424 Captulo 20
<nombre>Roberto</nombre>
<apellidos>Sanchez Lopez</apellidos>
<edad>16</edad>
</alumno>
<alumno>
<nombre>Fernando</nombre>
<apellidos>Sanz Ruiz</apellidos>
<edad>16</edad>
</alumno>
<alumno>
<nombre>Maria</nombre>
<apellidos>Toribio Gomez</apellidos>
<edad>17</edad>
</alumno>
<alumno>
<nombre>Rosa</nombre>
<apellidos>Fernandez Solis</apellidos>
<edad>16</edad>
</alumno>
</Alumnos>

El cdigo fuente de nuestra aplicacin que se encargar de volcar los


datos del documento XML al control DataGrid, es el siguiente:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
Dim objDataSet As New DataSet()
objDataSet.ReadXml("..\Alumnos.xml")
With DataGrid1
.CaptionText = "Datos de los Alumnos"
.DataSource = objDataSet.Tables(0)
End With
End Sub

Nuestro ejemplo en ejecucin, es el que se muestra en la figura 20.6.

Figura 20.6. Volcar datos XML al control DataGrid

Consejos y trucos para el desarrolador de Visual Basic .NET 425

Utilizando un control ListBox


para manipular elementos
Una posibilidad muy comn en aplicaciones Windows, es la que tiene el
desarrollador de aplicaciones para utilizar el control ListBox en los desarrollos para manipular y trabajar con elementos insertados dentro de este control.
En nuestro caso, vamos a trabajar con dos controles ListBox para pasar
los elementos seleccionados de un control a otro, aadiremos una opcin
para ordenar alfabticamente los elementos del segundo control y daremos la posibilidad de poder aadir nuevos elementos a nuestra aplicacin y de eliminar otros ya existentes.
La particularidad de esta aplicacin es la de poder aadir uno o ms
elementos de un control ListBox a otro. Esto se consigue modificando la
propiedad SelectionMode de ambos controles ListBox para darles el
valor MultiExtend, propiedad que nos permitir seleccionar ms de un
elemento de un control ListBox.
Por tanto, para desarrollar nuestro ejemplo, hemos introducido en nuestro formulario Windows, dos controles Label, siete controles Button y
dos controles ListBox. Todos los controles quedarn dispuestos en el
formulario de manera que nos permita ejecutar las funciones que tenemos preparadas para nuestra aplicacin. En la figura 20.7., podemos ver
el aspecto de los controles insertados en nuestro formulario Windows.

Figura 20.7. Controles dispuestos en nuestra aplicacin Windows

426 Captulo 20
A continuacin, veremos el cdigo fuente relacionado con nuestra aplicacin.
Form1.vb
Public Class Form1
Inherits System.Windows.Forms.Form
...
Private Const App_Titulo As String = "Lista de Elementos"
Private Const inputbox_Pregunta As String = "Introduzca el
elemento a aadir en la lista de elemento"
Private Const msgbox_Eliminar As String = "Debe seleccionar
al menos un elemento para poder eliminarlo de la lista de
elementos"
'Funcin para mostrar los elementos cargados en el control
ListBox1
Private Sub Elementos_ListBox1()
Label1.Text = ListBox1.Items.Count &
IIf(ListBox1.Items.Count = 1, " Elemento", " Elementos")
End Sub

'Funcin para mostrar los elementos cargados en el control


ListBox2
Private Sub Elementos_ListBox2()
Label2.Text = ListBox2.Items.Count &
IIf(ListBox2.Items.Count = 1, " Elemento", " Elementos")
End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnAdd.Click
'Aadir un elemento a la lista de elementos
Dim strRespuesta As String
strRespuesta = Trim(InputBox(inputbox_Pregunta,
App_Titulo))
If strRespuesta <> "" Then
ListBox1.Items.Add(strRespuesta)
Elementos_ListBox1()
End If
End Sub
Private Sub btnEliminar_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnEliminar.Click
'Eiminar el elemento o elementos seleccionados
If ListBox1.SelectedIndex <> -1 Then
'Si hay datos seleccionados en el control,
'eliminamos el dato seleccionado
Dim
Elementos_Indices(ListBox1.SelectedIndices.Count - 1) As
Integer

Consejos y trucos para el desarrolador de Visual Basic .NET 427


Dim I As Integer
For I = 1 To UBound(Elementos_Indices) + 1
ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
Next
Elementos_ListBox1()
Else
MessageBox.Show(msgbox_Eliminar, App_Titulo,
MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
Private Sub btnTodosDer_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnTodosDer.Click
'Pasa todos los elementos del control ListBox1 al
control ListBox2
While ListBox1.Items.Count > 0
ListBox1.SelectedIndex = ListBox1.Items.Count - 1
ListBox2.Items.Add(ListBox1.SelectedItem)
ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
End While
Elementos_ListBox1()
Elementos_ListBox2()
End Sub
Private Sub btnSelectDer_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnSelectDer.Click
'Pasamos los elementos seleccionados del control
ListBox1 al control ListBox2
'Primero pasamos los ndices y los elementos a una
matriz
Dim Elementos_Indices(ListBox1.SelectedIndices.Count 1) As Integer
Dim Elementos_Cadenas(ListBox1.SelectedIndices.Count 1) As String
ListBox1.SelectedIndices.CopyTo(Elementos_Indices, 0)
ListBox1.SelectedItems.CopyTo(Elementos_Cadenas, 0)
'Ahora recorremos la matriz y aadimos
'los elementos seleccionados al control ListBox2
'y posteriormente eliminamos los elementos
'seleccionados del control ListBox1
Dim I As Integer
'Aadimos los elementos seleccionados del control
ListBox1 al control ListBox2
For I = 1 To UBound(Elementos_Indices) + 1
ListBox2.Items.Add(Elementos_Cadenas(I - 1))
Next
'Eliminamos los elementos seleccionados del control
ListBox1

428 Captulo 20
For I = 1 To UBound(Elementos_Indices) + 1
ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
Next
Elementos_ListBox1()
Elementos_ListBox2()
End Sub
Private Sub btnSelectIzq_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnSelectIzq.Click
'Pasamos los elementos seleccionados del control
ListBox2 al control ListBox1
'Primero pasamos los ndices y los elementos a una
matriz
Dim Elementos_Indices(ListBox2.SelectedIndices.Count 1) As Integer
Dim Elementos_Cadenas(ListBox2.SelectedIndices.Count 1) As String
ListBox2.SelectedIndices.CopyTo(Elementos_Indices, 0)
ListBox2.SelectedItems.CopyTo(Elementos_Cadenas, 0)
'Ahora recorremos la matriz y aadimos
'los elementos seleccionados al control ListBox1
'y posteriormente eliminamos los elementos
'seleccionados del control ListBox2
Dim I As Integer
'Aadimos los elementos seleccionados del control
ListBox2 al control ListBox1
For I = 1 To UBound(Elementos_Indices) + 1
ListBox1.Items.Add(Elementos_Cadenas(I - 1))
Next
'Eliminamos los elementos seleccionados del control
ListBox2
For I = 1 To UBound(Elementos_Indices) + 1
ListBox2.Items.RemoveAt(ListBox2.SelectedIndex)
Next
Elementos_ListBox1()
Elementos_ListBox2()
End Sub
Private Sub btnTodosIzq_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnTodosIzq.Click
'Pasa todos los elementos del control ListBox2 al
control ListBox1
While ListBox2.Items.Count > 0
ListBox2.SelectedIndex = ListBox2.Items.Count - 1
ListBox1.Items.Add(ListBox2.SelectedItem)
ListBox2.Items.RemoveAt(ListBox2.SelectedIndex)
End While

Consejos y trucos para el desarrolador de Visual Basic .NET 429


Elementos_ListBox1()
Elementos_ListBox2()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
'Cargamos los datos iniciales en el control ListBox1
With ListBox1
.Items.Add("Uno")
.Items.Add("Dos")
.Items.Add("Tres")
.Items.Add("Cuatro")
.Items.Add("Cinco")
.Items.Add("Seis")
.Items.Add("Siete")
End With
Elementos_ListBox1()
End Sub
Private Sub btnOrdenar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnOrdenar.Click
If btnOrdenar.Text = "Ordenar automticamente" Then
'Habilitamos la ordenacin automtica
ListBox2.Sorted = True
btnOrdenar.Text = "No Ordenar automticamente"
Else
'Suprimimos la ordenacin automtica
ListBox2.Sorted = False
btnOrdenar.Text = "Ordenar automticamente"
End If
End Sub
End Class

Nuestra aplicacin en ejecucin es la que se muestra en la figura 20.8.

Figura 20.8. Ejecucin de la aplicacin de uso y gestin de elementos


con el control ListBox

430 Captulo 20

Usar el control NotifyIcon en nuestras


aplicaciones
Uno de los controles incorporados en el entorno de desarrollo de Visual
Studio .NET es el control NotifyIcon que nos permitir aadir un
icono en la barra de iconos de notificacin situada en la parte inferior
derecha de nuestro sistema operativo Windows.
Para llevar a cabo nuestro ejemplo, iniciaremos una nueva aplicacin
Windows e insertaremos en el formulario un control Button y tres componentes Windows, un componente Timer, un componente NotifyIcon
y un componente ContextMenu. El componente Timer lo utilizaremos
para aadir un texto actualizado con la fecha y hora del sistema en el
componente NotifyIcon cuando el icono de la aplicacin est activo y
visible en la barra de iconos de notificacin de nuestro sistema operativo.
El componente NotifyIcon lo utilizaremos para mostrar y ocultar el
icono en la barra de iconos de notificacin de nuestro sistema operativo.
Por ltimo, el componente ContextMenu nos permitir aadir un men
en la aplicacin que podremos visualizar en el componente NotifyIcon
al hacer clic con el botn derecho del ratn sobre el icono que aparece en
la barra de iconos de notificacin.
Antes de mostrar el cdigo de la aplicacin, comentaremos que hemos
decidido modificar algunas propiedades de los componentes insertados,
de esta manera, el componente Timer tendr la propiedad Interval a 990
y la propiedad Enabled a True. Por su parte, el componente NotifyIcon,
tendr la propiedad ContextMenu como ContextMenu1, que corresponde con el componente ContextMenu.
Para completar nuestro desarrollo, aadiremos un icono al proyecto y
modificaremos la propiedad Icon del control NotifyIcon para agregar
en ella el icono diseado.
Con todos los componentes preparados y con el control indicado, todos
ellos insertados en el formulario con sus propiedades modificadas, escribiremos el cdigo fuente de nuestra aplicacin, el cual permitir mostrar
cmo funciona nuestra aplicacin de notificacin. El cdigo fuente de
nuestra aplicacin es el que se detalla a continuacin:
Form1.vb
Public Class Form1

Consejos y trucos para el desarrolador de Visual Basic .NET 431


Inherits System.Windows.Forms.Form
...
Private Sub MenuItem1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MenuItem1.Click
'Opcin del men Mostrar Mensaje
MessageBox.Show("Se ha pulsado el men", "Ttulo de la
Aplicacin", MessageBoxButtons.OK, MessageBoxIcon.Information)
'Ocultamos el control NotifyIcon
NotifyIcon1.Visible = False
'Mostramos el formulario
Me.Show()
End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MenuItem2.Click
'Opcin del men Salir de la aplicacin
With NotifyIcon1
'Ocultamos el control NotifyIcon
.Visible = False
End With
'Cerramos la aplicacin
Application.Exit()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
With NotifyIcon1
'Mostramos el control NotifyIcon
.Visible = True
'Indicamos el texto que aparecer en
.Text = "Ejemplo"
End With
'Ocultamos el formulario
Me.Hide()
End Sub
Private Sub NotifyIcon1_DoubleClick(ByVal sender As Object,
ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick
'Al hacer doble clic sobre el icono de notificacin...
NotifyIcon1.Visible = False
'Mostramos el formulario
Me.Show()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Timer1.Tick
With NotifyIcon1
If .Visible = True Then
'Indicamos el texto que aparecer en el control
NotifyIcon
.Text = Date.Now
End If

432 Captulo 20
End With
End Sub
End Class

Este ejemplo en ejecucin, nos permite comprobar el funcionamiento no


slo del componente NotifyIcon, sino tambin el funcionamiento del
componente ContextMenu, dos de los nuevos componentes aadidos al
entorno de trabajo de Visual Studio y que son nuevos para el desarrollador
de Visual Basic.

Uso de delegados
Cuando hablamos de delegados para un programador de Visual Basic,
hablamos de algo que a buen seguro es desconocido o al menos desconcertante.
La definicin vulgar de delegado es la que corresponde a un puntero de
una funcin y proporciona interesantes caractersticas de programacin a
un programador.
La particularidad de los delegados, es que pueden hacer referencia a
funciones Shared y a los mtodos de una instancia, guardando la referencia al punto de entrada del mtodo y la referencia a la instancia del
objeto con el cual se va a llamar al mtodo.
La clase System.Delegate, hereda los miembros de un delegado. Un
delegado pasa por tres fases fundamentales, que corresponden con la
declaracin del delegado, la instancia que se crea del delegado, y por
ltimo, la invocacin del delegado desde nuestra aplicacin.
La mejor forma de trabajar con delegados es trabajando con un ejemplo
que nos ensee cmo se declara, se crea y se invoca un delegado. Para
ello, iniciaremos una nueva aplicacin de Windows y dentro del cdigo,
declararemos el delegado y crearemos una nueva clase que utilizaremos
en el uso de nuestro delegado. El cdigo fuente del ejemplo de programacin de un delegado es el siguiente:
Form1.vb
Delegate Sub MiDelegado(ByVal I As Integer)
Public Class Form1
Inherits System.Windows.Forms.Form
...
Private Sub Form1_Load(ByVal sender As System.Object, ByVal

Consejos y trucos para el desarrolador de Visual Basic .NET 433


e As System.EventArgs) Handles MyBase.Load
'Recogemos el valor insertado por el usuario
Dim I As Integer = InputBox
("Teclea una cifra mayor que 0",
"Ejemplo de Delegado")
'Declaramos (creamos) la clase del delegado
Dim Clase As New Ejemplo_Delegado()
'Probamos el delegado (lo llamamos)
Clase.DelegateTest(I)
End Sub
Public Sub Funcion(ByVal I As Integer)
MessageBox.Show(I)
End Sub
End Class
Public Class Ejemplo_Delegado
Sub DelegateTest(ByVal I As Integer)
'Declaramos el formulario
Dim miForm As Form1
miForm = New Form1()
'Declaramos el delegado
Dim MDG As MiDelegado
'Creamos una instancia del delegado
MDG = AddressOf miForm.Funcion
'Llamamos al mtodo
MDG.Invoke(2 ^ I)
End Sub
End Class

Nuestra aplicacin en ejecucin permite ejecutar el delegado de forma correcta, permitiendo pasar el resultado del valor a la clase
principal desde la cual hemos creado y llamado al delegado correspondiente.

Aadiendo una barra de botones


en nuestras aplicaciones
Otro de los controles ms utilizados en aplicaciones Windows es el control que nos permite aadir una barra de botones a nuestras aplicaciones.
Esto se consegua aadiendo a nuestro proyecto un componente
ImageList y un control ToolBar.
Un control ToolBar necesita del componente ImageList porque el control ImageList actuar como repositorio de imgenes que sern asociadas a cada botn aadido en el control ToolBar.

434 Captulo 20
Por tanto, en nuestro formulario, aadiremos tanto el componente como
el control indicado. En el componente ImageList, modificaremos la propiedad Images a la que aadiremos un conjunto de imgenes que debern poseer el mismo tamao.
A continuacin, modificaremos algunas propiedades del control ToolBar.
Entre ellas, la propiedad Appearance para darla el valor True y la propiedad Buttons
Buttons, la cual modificaremos para aadir un conjunto de botones a nuestra barra de botones.
Dentro de cada botn, podremos modificar una o ms propiedades asociadas a cada botn. Entre ellas, la propiedad ToolTipText es la propiedad ms destacable, y la utilizaremos para asignar la ayuda emergente
del botn que aparecer al acercar el puntero del ratn sobre un determinado botn.
Para asignar un separador entre botones dentro de la barra de botones,
aadiremos un botn y modificaremos la propiedad Style para darle el
valor Separator que asignar un separador real entre los botones de la
barra de botones.
No se necesita por tanto, aadir cdigo a nuestra aplicacin para asignar
una barra de botones. De hecho, nuestro ejemplo de prueba en ejecucin
es el que se muestra en la figura 20.9.

Figura 20.9. Ejecucin de la aplicacin de uso de barras de botones

Utilizando controles de progreso


Un control muy extendido en aplicaciones Windows y utilizado y conocido por el desarrollador de Visual Basic es el control ProgressBar, sin

Consejos y trucos para el desarrolador de Visual Basic .NET 435


embargo, existen dos controles nuevos aadidos al entorno de desarrollo
de Visual Studio que aunque son fciles de utilizar, pueden entraar
alguna dificultad.
En este pequeo ejemplo, mostraremos un uso de estos dos nuevos controles y del control ya conocido por los desarrolladores de Visual Basic.
Estamos hablando de los controles ProgressBar , TrackBar y
NumericUpDown.
Iniciaremos una nueva aplicacin de Windows y aadiremos en su formulario estos tres controles. Respecto del control TrackBar, modificaremos la propiedad LargeChange para asignarle el valor 1, la propiedad
Maximum a 100, dejando la propiedad Minimum a 0.
Por su parte, el resto de controles los dejaremos como estn, ya que
por defecto, contienen las propiedades con los valores deseados. La
idea es que los controles posean un valor mnimo 0 y un valor mximo
de 100.
Al incrementar o reducir los valores de los controles TrackBar y
NumericUpDown, el control ProgressBar se actualizar dependiendo
del valor modificado.
El cdigo fuente de nuestra aplicacin es el que se detalla a continuacin:
Form1.vb
Public Class Form1
Inherits System.Windows.Forms.Form
...
Private Sub NumericUpDown1_ValueChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
NumericUpDown1.ValueChanged
TrackBar1.Value = NumericUpDown1.Value
ProgressBar1.Value = NumericUpDown1.Value
End Sub
Private Sub TrackBar1_Scroll(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles TrackBar1.Scroll
NumericUpDown1.Value = TrackBar1.Value
ProgressBar1.Value = TrackBar1.Value
End Sub
End Class

Como vemos, la modificacin y utilizacin de estos controles es realmente sencilla. Estos controles suelen utilizarse en muchas aplicaciones Windows y su uso es casi idntico aunque sean controles
diferentes.

436 Captulo 20

Aadiendo ficheros de ayuda a nuestras


aplicaciones
Otra de las caractersticas nuevas para el desarrollador de Visual Basic, es
la nueva forma de aadir ficheros de ayuda y de cmo acceder a estos
ficheros desde nuestras aplicaciones.
En Visual Studio .NET, tenemos un nuevo control denominado
HelpProvider, que nos permitir preparar el fichero de ayuda a anexar
en nuestra aplicacin.
Los ficheros de ayuda dinmica con extensin .chm que sustituyen a los
antiguos fichero .hlp
.hlp, los podemos crear con herramientas gratuitas de
Microsoft y otros fabricantes.
Una vez que disponemos del archivo de ayuda concreto, podemos utilizarlo en nuestras aplicaciones utilizando el control HelpProvider y
modificando la propiedad HelpNamespace otorgndole la ruta con el
fichero de ayuda o el nombre del fichero de ayuda (si este se encuentra en
el mismo directorio donde reside el fichero ejecutable) para luego acceder
a l directamente.
Por ltimo, aadiremos a nuestra aplicacin cuatro controles Button
que nos permitir mostrar las diferentes sentencias de ejecucin ms generales de un fichero de ayuda de Windows. Estas funciones son la opcin para mostrar el contenido de la ayuda, la opcin para mostrar los
ndices de la ayuda, la opcin para buscar en la ayuda y la opcin para
mostrar ayuda emergente.
Nuestro ejemplo en ejecucin es el que se detalla a continuacin:
Form1.vb
Public Class Form1
Inherits System.Windows.Forms.Form
...
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
'Ejemplo de Contenidos de Ayuda
Help.ShowHelp(Me, HelpProvider1.HelpNamespace)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button2.Click
'Ejemplo de ndices de Ayuda
Help.ShowHelpIndex(Me, HelpProvider1.HelpNamespace)

Consejos y trucos para el desarrolador de Visual Basic .NET 437


End Sub
Private Sub Button3_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button3.Click
'Ejemplo de Bsqueda de Ayuda
Help.ShowHelp(Me, HelpProvider1.HelpNamespace,
HelpNavigator.Find, "")
End Sub
Private Sub Button4_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button4.Click
'Ejemplo de ayuda emergente, conocido como PopUp
Help.ShowPopup(Me, "Ejemplo de Ayuda Emergente", New
Point(Me.Top + (Me.Height / 2), Me.Top + (Me.Width / 2) + 50))
End Sub
End Class

Un ejemplo de ejecucin de ayuda emergente es el que se muestra en la


figura 20.10.

Figura 20.10. Ejemplo en ejecucin de ayuda emergente

Averiguar la versin de Microsoft .NET


Framework
Este truco, es realmente sencillo y gil de preparar, y nos proporciona la
informacin sobre la versin de Microsoft .NET Framework instalada. El
cdigo de este truco es el siguiente:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
MessageBox.Show(Environment.Version.ToString())
End Sub

438 Captulo 20
Esta porcin de cdigo, nos permite extraer la versin de Microsoft .NET
Framework instalada en la mquina.

No se olvide de las opciones de Visual


Studio .NET
Cuando trabaje con Microsoft Visual Studio .NET, recuerde que est trabajando con un entorno configurable, es decir, que podr modificar diferentes opciones de del entorno para trabajar ms a gusto.
Para acceder a las opciones del entorno, deberemos seleccionar la opcin
Herramientas>Opciones del men principal de Visual Studio .NET.
A la hora de depurar aplicaciones con Visual Studio .NET, recuerde que
puede indicar puntos de ruptura mediante la pulsacin de la tecla F9
sobre una lnea de cdigo. Para ejecutar paso a paso, lnea por lnea la
aplicacin, deber pulsar la tecla F11
F11. Si lo que quiere es pasar procedimiento a procedimiento, entonces deber pulsar la tecla F10
F10.
Si lo que quiere es extraer todos las clases, mtodos, eventos, propiedades, etc. de los objetos de Visual Studio .NET en un momento dado, deber pulsar las teclas alternativas Ctrl+<Espacio>
Ctrl+<Espacio>.
Si quiere pasar rpidamente de una ventana a otra dentro de Visual Studio
.NET, recuerde que deber pulsar las teclas alternativas Ctrl+<Tab>
Ctrl+<Tab>.

Internet como aliado


Este libro ha tratado de explicarle los aspectos avanzados de la programacin con Visual Basic .NET. Hemos visto cmo con Visual Basic .NET, se
pueden crear un conjunto de aplicaciones muy amplias, sin embargo, es
posible que pueda quedarle la sensacin de haberle parecido a poco y es
que reconozco que es difcil aglutinar en tan poco espacio, tantas cosas
como se quieren aadir a este libro, por esa razn, es interesante disponer
de algn sitio en Internet, donde poder extraer informacin.
Jorge Serrano Prez, autor de este libro y webmaster de PortalVB.com y
responsable de la Comunidad de Desarrolladores de Visual Basic .NET en
Microsoft MSDN Latam, le aconseja acudir a varios sitios web donde podr

Consejos y trucos para el desarrolador de Visual Basic .NET 439


acceder a informacin extra adicional sobre Visual Basic .NET. Estos sitios
son:
Microsoft MSDN Spain
http://www.microsoft.com/spain/msdn/
Microsoft MSDN Latam
http://www.microsoft.com/latam/msdn/
Microsoft MSDN Latam - Comunidad de desarrolladores de Visual Basic
.NET
http://www.microsoft.com/latam/msdn/comunidad/comunidades/
vbnet/
PortalVB.com
http://www.portalvb.com/
Nota
A partir de las direcciones web aadidas anteriormente, podr
acceder a otros sitios web que le aportarn informacin adicional.
Es difcil tener que elegir entre toda la informacin disponible de Visual
Basic .NET que hay en la red para aadirla en este libro, tratando de que
el lector encuentre lo que busca. Es posible que en alguna ocasin le
parezca que no ha encontrado eso que busca, sin embargo, en otras ocasiones, seguro que ha localizado aquel trozo de cdigo o explicacin que
le ha ayudado a salir adelante con sus desarrollos.
En estos sitios web que le indico, encontrar informacin, foros, documentos, tutoriales, ejemplos, noticias, que le ayudarn a seguir creciendo
y aprendiendo en la programacin de aplicaciones con Visual Basic .NET.

Resumen
Este captulo, ha tratado de recoger un conjunto de ejemplos que suelen
ser usados con frecuencia por los desarrolladores.
Estos ejemplos, consejos y trucos, tratan de ayudar al programador para
facilitarle la tarea de trabajo, indicndole algunas pistas a la hora de trabajar con Visual Basic .NET. Desde estas pistas variadas entre s, podr
aumentar sus conocimientos.

440 Captulo 20
El truco de todo programador de Visual Basic .NET, est en el conocimiento de las clases y mtodos que posee Microsoft .NET Framework.
Una vez conozcamos las clases y mtodos, estaremos cada vez ms preparados para hacer frente a cualquier proyecto que se nos cruce.
El problema es que dentro de .NET Framework existen miles de clases y
mtodos, y es completamente imposible no slo aprendernos todos en
poco tiempo, sino hacer un libro en el que se incluyan cada una con su
explicacin y definicin.
Slo con la prctica, se puede comprender la teora, prctica que he tratado de realizar a lo largo de todos los captulos del libro, haciendo de este
libro, un libro ms didctico que divulgativo, ya que se presupone que el
lector tiene unos conocimientos slidos sobre el lenguaje y la plataforma.

You might also like