在Microsoft Access中,单击标签时,与该标签关联的文本框将获得焦点。据我所知,VB.NET没有相同的功能。我知道我总是可以在标签的click事件中添加一些内容,就像这样......
TextBox1.Focus()
但是我在表单上有很多字段,如果我不需要将它添加到每个标签的click事件中,它会更容易。
我想有可能为所有强制制表符到下一个控件的标签创建一个事件,并假设我已经正确设置了Tab索引,那么这将有效。
表示在向表单添加新字段时会出现问题。在这种情况下,所有选项卡索引都需要重新验证。Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click, Label2.Click
'code to tab to next field...
End Sub
有没有更简单的方法?
答案 0 :(得分:3)
首先,在表单上设置控件的TabIndex订单,然后使用以下代码:
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each c As Control In Me.Controls
If TypeOf c Is Label Then AddHandler c.Click, AddressOf Label_Click
Next
End Sub
Private Sub Label_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Me.SelectNextControl(sender, True, True, True, True)
End Sub
End Class
现在,无论何时单击标签,都会关注订单中的以下控件。
答案 1 :(得分:0)
如何创建一个字典,其中标签是键,而焦点控件是值,然后将Click事件处理程序添加到Dictionary中的所有标签。每当您添加标签/控件时,所有'你需要做的是将另一个KeyValuePair添加到Dictionary
简单示例:
Public Class Form1
Protected Friend DicLabelToControl As Dictionary(Of Label, Control)
Protected Friend Sub InitLabelDic()
DicLabelToControl = New Dictionary(Of Label, Control) From {{Label1, TextBox1}, {Label2, TextBox2}}
End Sub
Protected Friend Sub AddClickEventsToLabels()
For Each lb As Label In DicLabelToControl.Keys
AddHandler lb.Click, AddressOf HandleLabelClick
Next
End Sub
Private Sub HandleLabelClick(sender As Object, e As EventArgs)
DicLabelToControl(CType(sender, Label)).Focus()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitLabelDic()
AddClickEventsToLabels()
End Sub
End Class