Cómo: Realizar varias acciones en un objeto

Actualización: noviembre 2007

En Visual Basic generalmente se debe especificar un objeto en cada instrucción que llame a uno de sus métodos o que tenga acceso a una de sus propiedades. Sin embargo, si tiene una serie de instrucciones que operan en un mismo objeto, puede utilizar una estructura With...End With para especificar el objeto solo una sola vez para todas las instrucciones. De este modo puede acelerar la ejecución de los procedimientos y evitar la escritura repetitiva.

Ejemplo

El ejemplo siguiente establece el color del primer plano y el estilo de fuente de Label según el valor de un argumento de procedimiento.

Imports draw = System.Drawing
' The preceding statement must appear at the beginning of the source file.
Dim alertLabel As New System.Windows.Forms.Label
Sub alertUser(ByVal value As Long)
    With alertLabel
        If value = 0 Then
            .ForeColor = draw.Color.Red
            .Font = New draw.Font(.Font, draw.FontStyle.Bold Or draw.FontStyle.Italic)
        Else
            .Forecolor = draw.Color.Black
            .Font = New draw.Font(.Font, draw.FontStyle.Regular)
        End If
    End With
End Sub

Tenga en cuenta el uso de Or (Operador, Visual Basic) para combinar los estilos de fuente. Especifica la combinación deseada de indicadores de bits. And (Operador, Visual Basic) habría generado 0 porque todos los miembros de enumeración FontStyle utilizan bits diferentes.

También tenga en cuenta el uso de Instrucción Imports (Tipo y espacio de nombres de .NET) para establecer draw de alias de importación, lo que facilita la lectura y acorta la referencia a los miembros System.Drawing.

También se pueden anidar instrucciones With...End With situándolas una dentro de otra, como en el código siguiente:

Sub setupForm()
    Dim anotherForm As New System.Windows.Forms.Form
    Dim button1 As New System.Windows.Forms.Button
    With anotherForm
        .Show()
        .Top = 250
        .Left = 250
        .ForeColor = System.Drawing.Color.LightBlue
        .BackColor = System.Drawing.Color.DarkBlue
        .Controls.Add(button1)
        With .Controls.Item(1)
            .BackColor = System.Drawing.Color.Thistle
            .Text = "Text on button1"
        End With
    End With
End Sub

Sin embargo, en la instrucción anidada With, la sintaxis hace referencia al objeto anidado; las propiedades del objeto en la instrucción With externa no están establecidas.

Vea también

Tareas

Cómo: Transferir el control fuera de una estructura de control

Cómo: Deshacerse de un recurso del sistema

Cómo: Acelerar el acceso a un objeto con una ruta de acceso de calificación larga

Conceptos

Estructuras de decisión

Estructuras de bucles

Estructuras de control adicionales

Estructuras de control anidadas

Referencia

Instrucción With...End With (Visual Basic)

Otros recursos

Flujo de control en Visual Basic