Cumbersome Solution

G

Garth

I ran into a small issue and I found a solution however it is cumbersome to use.

The problem and solution is describe within the MSDN article http://msdn2.microsoft.com/en-us/library/ms171728(d=ide).aspx

I would like to create one subroutine for all my textboxes and not one for each textbox, given the sample subroutine below, how can I add the textbox name into this subroutine?

Cumbersome Solution

Private Sub SetText(ByVal [text] As String)

' InvokeRequired required compares the thread ID of the

' calling thread to the thread ID of the creating thread.

' If these threads are different, it returns true.

If Me.tb_Netbios.InvokeRequired Then

Dim d As New SetTextCallback(AddressOf SetText)

Me.Invoke(d, New Object() {[text]})

Else

Me.tb_Netbios.Text = [text]

End If

End Sub
 
B

Branco Medeiros

Garth wrote:
I would like to create one subroutine for all my textboxes and not
one for each textbox, given the sample subroutine below, how can I
add the textbox name into this subroutine?
Private Sub SetText(ByVal [text] As String)
If Me.tb_Netbios.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.tb_Netbios.Text = [text]
End If
End Sub

One approach is to add the target TextBox as parameter:

Private Delegate Sub SetTextCallback(T As TextBox, V As String)
'...
Private Sub SetText(ByVal Target As TextBox, _
ByVal NewValue As String)
If Target.InvokeRequired Then
Dim D As New SetTextCallback(AddressOf SetText)
Target.Invoke(D, New Object() {Target, NewValue})
Else
Target.Text = NewValue
End If
End Sub
'...
Sub BtnClick(...)
SetText(Me.SomeTextBox, NewValue)
'....
End Sub

HTH.

Regards,

Branco.
 
G

Garth

Thanks Branco as i'm sure you already know, I'm still very green with
VB.Net.


Branco Medeiros said:
Garth wrote:
I would like to create one subroutine for all my textboxes and not
one for each textbox, given the sample subroutine below, how can I
add the textbox name into this subroutine?
Private Sub SetText(ByVal [text] As String)
If Me.tb_Netbios.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetText)
Me.Invoke(d, New Object() {[text]})
Else
Me.tb_Netbios.Text = [text]
End If
End Sub

One approach is to add the target TextBox as parameter:

Private Delegate Sub SetTextCallback(T As TextBox, V As String)
'...
Private Sub SetText(ByVal Target As TextBox, _
ByVal NewValue As String)
If Target.InvokeRequired Then
Dim D As New SetTextCallback(AddressOf SetText)
Target.Invoke(D, New Object() {Target, NewValue})
Else
Target.Text = NewValue
End If
End Sub
'...
Sub BtnClick(...)
SetText(Me.SomeTextBox, NewValue)
'....
End Sub

HTH.

Regards,

Branco.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top