Vb.net 带有最后焦点的文本框

Vb.net 带有最后焦点的文本框,vb.net,textbox,focus,Vb.net,Textbox,Focus,我有一个表单,有+50个控件和按键数字屏幕,可以在这个表单的5个文本框中写入 我正在使用此代码在这些文本框中使用按键数字屏幕写入: Private Sub bt0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt0.Click, bt1.Click, bt2.Click, bt3.Click, bt4.Click, bt5.Click, bt6.Click, bt7.Click, bt8.Cl

我有一个表单,有+50个控件和按键数字屏幕,可以在这个表单的5个文本框中写入

我正在使用此代码在这些文本框中使用按键数字屏幕写入:

Private Sub bt0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt0.Click, bt1.Click, bt2.Click, bt3.Click, bt4.Click, bt5.Click, bt6.Click, bt7.Click, bt8.Click, bt9.Click, btDec.Click
        If TypeOf sender Is DevExpress.XtraEditors.SimpleButton Then
            txtRefe.Focus()
            SendKeys.Send(CType(sender, DevExpress.XtraEditors.SimpleButton).Text)
        End If
    End Sub
问题是:在触摸数字按钮之前,我需要知道这5个文本框中哪一个有焦点

我在这篇文章中看到了这段代码,以找到最后的焦点:

Private _focusedControl As Control
    Private Sub TextBox_GotFocus(ByVal sender As Object, ByVal e As EventArgs)
        _focusedControl = DirectCast(sender, Control)
    End Sub
    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
        If _focusedControl IsNot Nothing Then
            'Change the color of the previously-focused textbox
            _focusedControl.BackColor = Color.Red
        End If
    End Sub

但是我是如何在一个有+50个控件的表单中实现它的呢?控件有多种类型:按钮、复选框、组合框、文本框等等。

您可以递归地循环表单的控件集合并添加事件处理程序。

任何人想到的最简单、最简单的解决方案就是制作一个包含您选择的数据类型的标志。比方说int,那么你要做的就是为每个文本框的每个焦点事件更新一个不同的标志值。为了简单起见

When textBox1 gets focused -> set the flag value to 1
when textBox2 gets focused -> set the flag value to 2
when textBox3 gets focused -> set the flag value to 3
when textBox4 gets focused -> set the flag value to 4
when textBox5 gets focused -> set the flag value to 5
现在,您正在记录最后一个焦点文本框。您可以使用switch语句来处理我们的5种情况

   Select Case flag
    case 1: 'code for textBox1
    case 2: 'code for textBox2
    case 3: 'code for textBox3
    case 4: 'code for textBox4
    case 5: 'code for textBox5
   End Select

这不会运行。我以前试过一些东西。为什么不跑?我的表单有+50个控件复选框、组合框、按钮等。如果我只处理5个文本框,当其他控件获得焦点时,变量将存储一个不真实的值。我不明白。对于5个文本框中的每个文本框,您只需拥有5个不同的焦点事件处理程序。每个事件处理程序都会将标志值更改为不同的值。其他控件与我们的问题有什么关系?例如,如果网格有焦点,用户单击数字按钮,则标志包含文本框有焦点且不正确。Last focus->gridyae,您不想只保存文本框的焦点吗?那不是你的问题吗?你把我弄糊涂了。建议的解决方案是“全部捕获+50个控件”吗?@yae:是的。唯一的另一种选择是拦截Windows消息,但这要复杂得多。