如何:对于对象执行多个操作

更新:2007 年 11 月

在 Visual Basic 中,对于调用某个对象的方法之一或访问某个对象的属性之一的每个语句,通常都必须在该语句中指定该对象。但是,如果有一系列对同一对象进行操作的语句,则可使用 With...End With 语句为所有语句一次指定该对象。这样可使过程运行得更快,并帮助避免重复键入。

示例

下面的示例根据过程参数的值来设置 Label 的前景色和字体样式。

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

注意使用 Or 运算符 (Visual Basic) 来组合字体样式。这指定了所需的位标志组合。And 运算符 (Visual Basic) 的结果为 0,这是因为所有的 FontStyle 枚举成员使用的位都不相同。

另外注意使用 Imports 语句(.NET 命名空间和类型) 来建立导入别名 draw,这样可使对 System.Drawing 成员的引用更短、更易于阅读。

也可以通过将一个语句放入另一语句中来嵌套 With...End With 语句,如下面的代码所示:

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

但是,在嵌套的 With 语句中,语法引用嵌套的对象;没有设置外层 With 语句中的对象的属性。

请参见

任务

如何:将控制转移到控制结构外

如何:释放系统资源

如何:加速访问具有长限定路径的对象

概念

决策结构

循环结构

其他控制结构

嵌套的控制结构

参考

With...End With 语句 (Visual Basic)

其他资源

控制流 (Visual Basic)