Share via


方法 : オブジェクトに対して複数のアクションを実行する

更新 : 2007 年 11 月

通常、Visual Basic では、オブジェクトのメソッドを呼び出したりオブジェクトのプロパティにアクセスしたりするすべてのステートメントでオブジェクトを指定する必要があります。しかし、一連のステートメントがすべて同じオブジェクトを対象とする場合は、With...End With 構造を使用して、1 回ですべてのステートメントに対してそのオブジェクトを指定できます。これにより、プロシージャの実行速度が向上し、入力の手間も省くことができます。

使用例

次の例では、プロシージャ引数の値に従って 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) を使用します。これによって、ビット フラグの目的の組み合わせを指定します。FontStyle 列挙型のメンバはすべて異なるビットを使用しているため、And 演算子 (Visual Basic) の結果は 0 になります。

また、Imports ステートメント (.NET 名前空間および型) を使用してインポート エイリアス draw を構築しています。これによって、System.Drawing メンバへの各参照が短くなり、読みやすくなります。

With...End With ステートメントの中に別の 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 における制御フロー