Apologies - only now I have noticed that you have asked for VB.NET code, not C#. Here is the same thing in VB.NET:
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Dim argumentsList = New List(Of DAItemGroupArguments)()
For Each control As Control In Me.Controls
Dim itemId = TryCast(control.Tag, String)
If itemId IsNot Nothing Then
argumentsList.Add(New DAItemGroupArguments("", "OPCLabs.KitServer.2", itemId, 50, control))
End If
Next control
Me.easyDAClient1.SubscribeMultipleItems(argumentsList.ToArray())
End Sub
Private Sub easyDAClient1_ItemChanged(ByVal sender As Object, ByVal e As EasyDAItemChangedEventArgs) Handles easyDAClient1.ItemChanged
Dim textBox = TryCast(e.State, TextBox)
If textBox IsNot Nothing AndAlso textBox.ReadOnly Then
If e.Exception Is Nothing Then
textBox.Text = e.Vtq.DisplayValue()
Else
textBox.Text = "** Error **"
End If
End If
End Sub
Private Sub writeButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles writeButton.Click
Dim textBox As TextBox = Me.writeValueTextBox
Me.easyDAClient1.WriteItemValue("", "OPCLabs.KitServer.2", CStr(textBox.Tag), textBox.Text)
End Sub