8
Ramón Mateos Mondéjar/ Lola Cano Gil 1 CONTROLADORES DE EVENTOS CONTROLADORES DE EVENTOS .............................................................................. 1 1. Compartir controladores deeventos ........................................................................................ 1 2. Recorrer controles en iteración........................................................................................... 1 3. Agregar controles en tiempo de ejecución .............................................................................. 1 4. Compartir controladores deeventos.................................................................................... 2 5. Recorrer controles en iteración........................................................................................... 2 6. Agregar controles en tiempo de ejecución .............................................................................. 3 7. Ejemplos ....................................................................................................................... 4 Aunque ya no se admiten matrices de control en Visual Basic 2008, mediante el modelo de evento puede duplicar y expandir más allá de la funcionalidad de matrices de control. Diferencias conceptuales En Visual Basic 2008, ya no se admiten las matrices de control. Los cambios en el modelo de evento hacen que las matrices de control sean innecesarias y .NET Framework proporciona las mismas funciones para trabajar con controles. 1. Compartir controladores de eventos Visual Basic 2008 permite a cualquier controlador de eventos controlar los eventos de varios controles, incluso los controles con nombres diferentes y de tipos distintos. Por ejemplo, es posible que quiera agregar dos controles Button (Button1 y Button2) y un control CheckBox (CheckBox1) a un formulario y, a continuación, crear un controlador de eventos a fin de controlar el evento Click para los tres controles. Private Sub MixedControls.Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click 2. Recorrer controles en iteración En Visual Basic 2008 se pueden seguir recorriendo en iteración los controles de un formulario o contenedor mediante ControlCollection de la clase Control. En Visual Basic 2008, la colección Controls sólo devuelve controles que se encuentran en un único contenedor. Debe recorrer en iteración los controles de cada control de contenedor por separado; esto se puede hacer mediante una función recursiva. 3. Agregar controles en tiempo de ejecución En Visual Basic 2008, los controles se agregan en tiempo de ejecución mediante la palabra clave New de una instrucción Dim y, a continuación, se utiliza el método Add para el contenedor al que desea agregar el control.

Visual Basic:Control de Eventos (7)

Embed Size (px)

DESCRIPTION

Visual basic .net 2008: Controlador de eventos

Citation preview

Page 1: Visual Basic:Control de Eventos (7)

Ramón Mateos Mondéjar/ Lola Cano Gil 1

CONTROLADORES DE EVENTOS

CONTROLADORES DE EVENTOS .............................................................................. 1

1. Compartir controladores de eventos ........................................................................................ 1

2. Recorrer controles en iteración ........................................................................................... 1

3. Agregar controles en tiempo de ejecución.............................................................................. 1

4. Compartir controladores de eventos .................................................................................... 2

5. Recorrer controles en iteración ........................................................................................... 2

6. Agregar controles en tiempo de ejecución.............................................................................. 3

7. Ejemplos ....................................................................................................................... 4

Aunque ya no se admiten matrices de control en Visual Basic 2008, mediante el

modelo de evento puede duplicar y expandir más allá de la funcionalidad de

matrices de control.

Diferencias conceptuales

En Visual Basic 2008, ya no se admiten las matrices de control. Los cambios en el

modelo de evento hacen que las matrices de control sean innecesarias y .NET

Framework proporciona las mismas funciones para trabajar con controles.

1. Compartir controladores de eventos

Visual Basic 2008 permite a cualquier controlador de eventos controlar los eventos

de varios controles, incluso los controles con nombres diferentes y de tipos

distintos.

Por ejemplo, es posible que quiera agregar dos controles Button (Button1 y

Button2) y un control CheckBox (CheckBox1) a un formulario y, a continuación,

crear un controlador de eventos a fin de controlar el evento Click para los tres

controles.

Private Sub MixedControls.Click(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

Button1.Click, Button2.Click, CheckBox1.Click

2. Recorrer controles en iteración

En Visual Basic 2008 se pueden seguir recorriendo en iteración los controles de un

formulario o contenedor mediante ControlCollection de la clase Control.

En Visual Basic 2008, la colección Controls sólo devuelve controles que se

encuentran en un único contenedor. Debe recorrer en iteración los controles de

cada control de contenedor por separado; esto se puede hacer mediante una

función recursiva.

3. Agregar controles en tiempo de ejecución

En Visual Basic 2008, los controles se agregan en tiempo de ejecución mediante la

palabra clave New de una instrucción Dim y, a continuación, se utiliza el método

Add para el contenedor al que desea agregar el control.

Page 2: Visual Basic:Control de Eventos (7)

Ramón Mateos Mondéjar/ Lola Cano Gil 2

En Visual Basic 2008, debe definir los controladores de eventos para los controles

que se agregan en tiempo de ejecución. Esto se realiza mediante la instrucción

AddHandler.

4. Compartir controladores de eventos

El ejemplo siguiente muestra cómo se comparte el controlador de eventos Change

(TextChanged en Visual Basic 2008) en un grupo de tres controles TextBox. En

Visual Basic 2008, la cláusula Handles del controlador de eventos especifica qué

control controlará el evento. El controlador de eventos devuelve un Object

genérico, por lo que se debe convertir en el tipo de objeto específico (en este caso,

TextBox) que desea controlar mediante el método DirectCast.

Se utiliza la palabra clave DirectCast de la misma manera que se utiliza la palabra

clave CType (Función) y TryCast. Se proporciona una expresión como primer

argumento y un tipo para convertir como segundo argumento.

' Visual Basic 2008

Private Sub TextBoxes_TextChanged(ByVal sender As

System.Object, _

ByVal e As System.EventArgs) Handles TextBox1.TextChanged,

_

TextBox2.TextChanged, TextBox3.TextChanged

Select Case DirectCast(sender, TextBox).Name

Case TextBox1.Name

MsgBox("The text in the first TextBox has

changed")

Case TextBox2.Name

MsgBox("The text in the second TextBox has

changed")

Case TextBox3.Name

MsgBox("The text in the third TextBox has

changed")

End Select

End Sub

Nota

El comportamiento de eventos es ligeramente diferente en Visual

Basic 2008. El evento TextChanged se produce cuando se inicializa

un control (por ejemplo, en el evento Form_Load) así como cuando

se cambia texto en tiempo de ejecución. En Visual Basic 6.0, el

evento Change sólo se producía cuando se cambiaba texto.

5. Recorrer controles en iteración

En Visual Basic 2008, un objeto Control se pasa como un argumento; tiene una

colección ControlCollection que incluye todos los controles que se encuentran en

ese control. El operador Typeof se utiliza para determinar si cada control es de tipo

TextBox.

Nota

Un objeto Form es de tipo Control; también puede pasar un

Page 3: Visual Basic:Control de Eventos (7)

Ramón Mateos Mondéjar/ Lola Cano Gil 3

objeto Form como un argumento.

Como no se incluyen controles anidados en la colección ControlCollection, el método HasChildren se utiliza para determinar

si un control contiene otros controles, en ese caso, se llama a la función ClearText de forma recursiva.

' Visual Basic 2008

Private Sub ClearText(ByVal container As Control)

Dim ctrl As Control

For Each ctrl In container.Controls

If TypeOf (ctrl) Is TextBox Then

ctrl.Text = ""

End If

If ctrl.HasChildren Then

ClearText(ctrl)

End If

Next

End Sub

6. Agregar controles en tiempo de ejecución

El ejemplo siguiente muestra cómo se agrega un control de cuadro de texto a un

formulario en tiempo de ejecución. En Visual Basic 2008, el control se agrega a la

colección ControlCollection. En Visual Basic 2008, debe enlazar el control de

eventos mediante la instrucción AddHandler.

Se supone que se agrega un control de cuadro de texto a un formulario en tiempo

de ejecución ,en el ejemplo de Visual Basic 2008 se supone que existe un

controlador de eventos denominado TextChangedHandler para el primer control

TextBox.

' Visual Basic 2008

' Declare a new TextBox.

Dim TextBox2 As New TextBox

' Set the location below the first TextBox

TextBox2.Left = TextBox1.Left

TextBox2.Top = TextBox1.Top + 30

' Add the TextBox to the form's Controls collection.

Me.Controls.Add(TextBox2)

AddHandler TextBox2.TextChanged, AddressOf

TextChangedHandler

Notas de actualización

Cuando una aplicación creada con Visual Basic 6.0 se actualiza a Visual Basic 2008,

cualquier matriz de control se actualiza a las clases de matrices de controles

específicas del control especial. Estas clases están contenidas en el espacio de

nombres Microsoft.VisualBasic.Compatibility.VB6 y las utilizan las herramientas de

actualización para emular el comportamiento de las matrices de controles de Visual

Basic 6.0.

Page 4: Visual Basic:Control de Eventos (7)

Ramón Mateos Mondéjar/ Lola Cano Gil 4

Aunque es posible utilizar estas clases de matrices de controles en el nuevo

desarrollo de Visual Basic 2008, se recomienda utilizar el modelo de evento y las

funciones de .NET Framework en su lugar.

--------------------------------------------- oOo --------------------------------------------------

7. Ejemplos

El ejemplo siguiente muestra dos usos de DirectCast, uno con un resultado

satisfactorio en tiempo de ejecución y otro que no lo tiene.

Visual Basic 2005

Dim q As Object = 2.37

Dim i As Integer = CType(q, Integer)

' The following conversion fails at run time

Dim j As Integer = DirectCast(q, Integer)

Dim f As New System.Windows.Forms.Form

Dim c As System.Windows.Forms.Control

' The following conversion succeeds.

c = DirectCast(f, System.Windows.Forms.Control)

En el ejemplo anterior, el tipo en tiempo de ejecución de q es Double. CType tiene

un resultado satisfactorio porque Double se puede convertir en Integer. No

obstante, el primer DirectCast no tiene un resultado satisfactorio porque el tipo en

tiempo de ejecución de Double no tiene relación de herencia con Integer, aunque

existe una conversión. El segundo DirectCast tiene un resultado satisfactorio

porque convierte del tipo Form al tipo Control del que Form hereda.

Ejercicio: programar dos botones con diferente IVA con un controlador de eventos

Public Class Form1

'Creación de un Controlador de Eventos

Private Sub Buttons_Click(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

B1.Click, B2.Click

Page 5: Visual Basic:Control de Eventos (7)

Ramón Mateos Mondéjar/ Lola Cano Gil 5

Dim Impuesto As Single

Select Case DirectCast(sender, Button).Name

Case B1.Name

Impuesto = Val(Tc.Text) * 6 / 100

Case B2.Name

Impuesto = Val(Tc.Text) * 15 / 100

End Select

Tiva.Text = Impuesto

Ttotal.Text = Val(Tc.Text) + Impuesto

End Sub

Private Sub Button3_Click(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

Button3.Click

End

End Sub

End Class

Ejemplo de presupuesto de compra de un ordenador

Public Class Form1

Dim opc As Long = 0

'Creación de un Controlador de Eventos

Private Sub CheckBox_CheckedChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

ChLector.CheckedChanged, ChPantalla.CheckedChanged,

ChKit.CheckedChanged, ChImpresora.CheckedChanged

'Select Case DirectCast(sender, CheckBox).Name

' Case ChLector.Name

'If ChLector.Checked = True Then opc += 500 Else opc -= 500

' Case ChPantalla.Name

‘If ChPantalla.Checked = True Then opc += 250 Else opc-=250

' Case ChKit.Name

'If ChKit.Checked = True Then opc += 150 Else opc -= 150

' Case ChImpresora.Name

Page 6: Visual Basic:Control de Eventos (7)

Ramón Mateos Mondéjar/ Lola Cano Gil 6

'If ChImpresora.Checked = True Then opc +=200 Else opc-=200

'End Select

' Ttotal.Text = Format(opc + 1300, "#,###,###")

End Sub

Private Sub ChLector_CheckedChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

ChLector.CheckedChanged

If ChLector.Checked = True Then

opc += 500

Else

opc -= 500

End If

Ttotal.Text = Format(opc + 1300, "#,###,###")

End Sub

Private Sub ChPantalla_CheckedChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

ChPantalla.CheckedChanged

If ChPantalla.Checked = True Then

opc += 250

Else

opc -= 250

End If

Ttotal.Text = Format(opc + 1300, "#,###,###")

End Sub

Private Sub ChKit_CheckedChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

ChKit.CheckedChanged

If ChKit.Checked = True Then

opc += 150

Else

opc -= 150

End If

Ttotal.Text = Format(opc + 1300, "#,###,###")

End Sub

Private Sub ChImpresora_CheckedChanged(ByVal sender As

System.Object, ByVal e As System.EventArgs) Handles

ChImpresora.CheckedChanged

If ChImpresora.Checked = True Then

opc += 200

Else

opc -= 200

End If

Ttotal.Text = Format(opc + 1300, "#,###,###")

End Sub

Page 7: Visual Basic:Control de Eventos (7)

Ramón Mateos Mondéjar/ Lola Cano Gil 7

Private Sub Button1_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button1.Click

End

End Sub

End Class

EJERCICIO DE CREAR CONTROLES Y SUS EVENTOS EN TIEMPO DE

EJECUCIÓN

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

PictureBox1.Enabled = False

PictureBox1.Visible = False

Dim t As New TextBox

Dim x As New Point

'añadir el control(CAJA DE TEXTO) al formulario

Me.Controls.Add(t)

x.X = 152

x.Y = 370

t.Location = x

t.BackColor = Color.Blue

t.ForeColor = Color.Chocolate

t.Visible = True

' AÑADIR PICTUREBOX'S AL FORMULARIO

Dim i, Z, W, M As Integer

W = 1 'VARIABLE PARA EL NUMERO DE PICTUREBOX

M = 0 ' VARIABLE PARA EL Y DE LA LOCALIZACION (INCREMENTO)

For i = 1 To 3

For Z = 1 To 3

Dim ima As New PictureBox

x.X = Z * 102

x.Y = i + M

Me.Controls.Add(ima)

ima.Location = x

ima.Width = 100

ima.Height = 100

ima.BorderStyle = BorderStyle.FixedSingle

ima.SizeMode = PictureBoxSizeMode.StretchImage

ima.Visible = True

ima.Image = My.Resources._135098_iron_man_400

PictureBox

1

Etiquetas: label1 y label2

Programa para crear

Imágenes y sus eventos en

tiempo de ejecución.

Page 8: Visual Basic:Control de Eventos (7)

Ramón Mateos Mondéjar/ Lola Cano Gil 8

ima.Name = "pic" & W

W = W + 1

Label1.Text = "LA ULTIMA PICTUREBOX CREADA ES: " &

ima.Name

Next

M = M + 102

Next

'AÑADIR LAS PICTUREBOX AL CONTROLADOR DE EVENTOS

Dim ctrl As Control

For Each ctrl In Me.Controls

If TypeOf (ctrl) Is PictureBox Then

AddHandler ctrl.Click, AddressOf PictureBox_Click

End If

Next

End Sub

Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal

e As System.EventArgs) Handles PictureBox1.Click

Label2.Text = "HAS HECHO CLICK EN..." & DirectCast(sender,

PictureBox).Name.ToString

End Sub

End Class

EL RESULTADO ES: