How to: Perform Multiple Actions on an Object
In Visual Basic you must usually specify an object in every statement that calls one of its methods or accesses one of its properties. However, if you have a series of statements that all operate on the same object, you can use a With...End With structure to specify the object once for all of the statements. This can make your procedures run faster and help you avoid repetitive typing.
Example
The following example sets the foreground color and font style of a Label depending on the value of a procedure argument.
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
Note the use of the Or Operator (Visual Basic) to combine font styles. This specifies the desired combination of bit flags. The And Operator (Visual Basic) would have produced 0 because all the FontStyle enumeration members use different bits.
Note also the use of the Imports Statement (.NET Namespace and Type) to establish the import alias draw, which makes each reference to System.Drawing members shorter and easier to read.
You can also nest With...End With statements by placing one inside another, as in the following code:
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
Within the nested With statement, however, the syntax refers to the nested object; properties of the object in the outer With statement are not set.
See Also
Tasks
How to: Transfer Control Out of a Control Structure
How to: Dispose of a System Resource
How to: Speed Up Access to an Object with a Long Qualification Path
Concepts
Reference
With...End With Statement (Visual Basic)