如何在标签上选择TextBox单击

时间:2014-05-07 12:49:20

标签: vb.net winforms ms-access

在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

有没有更简单的方法?

2 个答案:

答案 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