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

更新:2007 年 11 月

执行重复引用单个对象或结构的一系列语句。

With object
    [ statements ]
End With

组成部分

  • object
    必需。变量或表达式。可以计算为任何数据类型,包括基本类型。

  • statements
    可选。With 与 End With 之间对 object 运行的一条或多条语句。

  • End With
    必需。结束 With 块的定义。

备注

With...End With 允许对指定的对象执行一系列语句,而不必重新限定对象的名称。如果对象的限定路径太长,使用 With...End With 可提高性能。With 块也减少了限定路径的重复键入和错误键入其中任何元素的风险。

例如,若要修改单个对象的若干不同的属性,请将属性分配语句放在 With...End With 中,这样只需引用一次对象,而不必在每个属性分配中都引用它。

规则

  • **数据类型。**object 的数据类型可以是任何类或结构类型,甚至可以是 Visual Basic 基础类型(如 Integer)。.NET Framework 支持类或结构的所有基础类型,您可在 With 块中访问它们的成员。

  • **声明。**进入 With 块前必须声明 object。不能在 With 语句中声明它。

  • **迭代数。**With 块不是迭代构造。除非块内存在循环,否则语句只运行一次。

  • **嵌套结构。**可以将一个 With...End With 结构放在另一个 With...End With 结构内以嵌套该结构。有关示例,请参见 如何:对于对象执行多个操作

    但是,由于外部语句的成员被屏蔽在内部语句内,必须在内部 With 块中提供对外部 With 块中的任何对象成员的完全限定对象引用。

    您还可以将多个不同类型的控制结构嵌套在一个结构中。有关更多信息,请参见 嵌套的控制结构

  • **传递到结构之外。**Visual Basic 不支持 Exit 语句 (Visual Basic) 将控制传递到 With 块之外。如果需要在所有语句都执行完之前退出,请在 End With 语句上放置一个标签并使用 GoTo 语句 分支到该标签。有关更多信息,请参见 如何:标记语句

    不能将控制从 With 块外传递到块内,也不能从块内传递到块外。可以从块内调用过程,但控制将返回到以下语句。

  • **访问其他对象。**一旦进入 With 块,在传递 End With 语句之前,无法重新分配 object。因此,访问指定对象的方法和属性时不必限定它们。可以使用其他对象的方法和属性,但是必须用它们的对象名限定它们。

示例

下面的示例使用 With 块对单个对象执行一系列语句。该示例假设已创建对象 testObject 且公开了引用的属性。

With testObject
    .Height = 100
    .Text = "Hello, World"
    .ForeColor = System.Drawing.Color.Green
    .Font = New System.Drawing.Font(.Font, _
        System.Drawing.FontStyle.Bold)
End With

对象初始值设定项中的 With 关键字

Visual Basic 2008 在对象初始值设定项中引入了 With 的新用法。有关更多信息和示例,请参见 对象初始值设定项:命名类型和匿名类型匿名类型

请参见

任务

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

如何:标记语句

概念

嵌套的控制结构

对象初始值设定项:命名类型和匿名类型

匿名类型

参考

Exit 语句 (Visual Basic)

GoTo 语句