With...End With ステートメント (Visual Basic)
一連のステートメントを繰り返し実行します単一のオブジェクトと構造を示します。
With object
[ statements ]
End With
指定項目
語句 |
定義 |
expression |
必須。オブジェクトに評価される式です。式は、必要に応じて、複雑になることができ、一度だけ評価されます。式は、基本型を含む任意のデータ型として評価できます。 |
statements |
省略可能。expressionの評価によって生成されたオブジェクトのメンバーを示している End With と With の間の一つ以上のステートメント。 |
End With |
必須。With ブロックの定義を終了します。 |
解説
With...End Withを使用して、オブジェクトの複数回の名前を指定せずにそのオブジェクトに対して一連のステートメントを実行できます。With のステートメント ブロック内では、With のステートメントでオブジェクトがその前に行ったように時間で起動されたオブジェクトのメンバーを指定できます。
たとえば、一つのオブジェクトの複数のプロパティを変更するには、プロパティの割り当てごとに一度だけではなく、オブジェクトを一度だけを参照する With...End With ブロック内のプロパティの代入ステートメントを設定します。
コード内に複数のステートメントを同じオブジェクトにアクセスし、With のステートメントを使用して、次の利点があります。:
複雑な式を複数回の評価またはメンバーを複数回を参照する一時結果を変数に代入する必要はありません。
コード内を反復的な変更の式の削除によって読みやすくします。
expression のデータ型は Integerなど、すべてのクラスまたは構造体の型、またはVisual Basicの基本型である場合もあります。
expression は、ブロックでエントリに、一度しか評価されません。With のブロック内から expression を再割り当てすることはできません。
With ブロック内では、修飾せずにのみ指定したオブジェクトのメソッドとプロパティにアクセスできます。他のオブジェクトのメソッドやプロパティを使用するには、オブジェクト名で修飾する必要があります。
別の内の With...End With の1種類のステートメントを設定できます。With...End With の入れ子になったステートメントは参照されるオブジェクトがコンテキストから明示的複雑である場合があります。オブジェクトが With の内部のブロック内から参照されると With の外側のブロックになるオブジェクトに完全修飾参照を提供する必要があります。
ブロックの外部から With のステートメント ブロックに分岐することはできません。
ブロックはループが含まれていない場合、ステートメントは一度だけ実行されます。異なる種類の制御構造を入れ子にすることができます。詳細については、「入れ子になった制御構造 (Visual Basic)」を参照してください。
[!メモ]
オブジェクト初期化子で With のキーワードを使用できます。使用例を含む詳細については、「オブジェクト初期化子: 名前付きの型と匿名型 (Visual Basic)」および「匿名型 (Visual Basic)」を参照してください。
先ほどインスタンスを作成したオブジェクトのプロパティまたはフィールドを初期化した場合にのみ With ブロックを使用する場合は、オブジェクト初期化子を使用することを検討してください。
使用例
次の例では、With の各ブロックは、単一のオブジェクトに対する一連のステートメントを実行します。
Private Sub AddCustomer()
Dim theCustomer As New Customer
With theCustomer
.Name = "Coho Vineyard"
.URL = "http://www.cohovineyard.com/"
.City = "Redmond"
End With
With theCustomer.Comments
.Add("First comment.")
.Add("Second comment.")
End With
End Sub
Public Class Customer
Public Property Name As String
Public Property City As String
Public Property URL As String
Public Property Comments As New List(Of String)
End Class
次の例では With…End With のステートメントに入れ子にします。With の入れ子になったステートメント内では、構文は、内部オブジェクトを示します。
Dim theWindow As New EntryWindow
With theWindow
With .InfoLabel
.Content = "This is a message."
.Foreground = Brushes.DarkSeaGreen
.Background = Brushes.LightYellow
End With
.Title = "The Form Title"
.Show()
End With