【问题标题】:how to find out which textbox is currenlty selected如何找出当前选择了哪个文本框
【发布时间】:2011-06-24 01:56:53
【问题描述】:

我有 3 个文本框,我如何找出当前选择了哪个文本框(有焦点)。我什么都想不出来。

Public Class Form1
    Public activeTextBox As TextBox = CType(Me.ActiveControl, TextBox)
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        activeTextBox.Text = activeTextBox.Text & "This is text 1"
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        activeTextBox.Text = activeTextBox.Text & "This is the text 2"
    End Sub
End Class

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    我假设这是一个 Windows 窗体应用程序。

    similar question 提供了两个可能的建议:

    Me.ActiveControl 
    

    或者,您可以使用 Windows API 编写一个方法来获取当前具有焦点的控件的句柄。 WindowsClient.Net 上的这个article 有一个例子。

    但是,只有在调用方法时 TextBox 仍具有焦点时,这些选项中的每一个才有效。

    在您的按钮事件处理程序中,您试图找出哪个是最后一个活动的 TextBox,以便对其进行处理。在这种情况下,Me.ActiveControl 将没有多大用处,因为一旦您单击按钮,TextBox 控件就会失去焦点。下面的示例代码显示了如何使用 TextBox 的 Enter 和 Leave 事件来跟踪哪个 TextBox 是最近活动的。我假设 TextBox 被称为 TextBox1。

            Public Class Form1
                Public activeTextBox As TextBox 
    
    Private Sub TextBox_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter
       activeTextBox = CType(sender, TextBox)
    End Sub    
    
                Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                  If (activeTextBox IsNot Nothing) Then
                  activeTextBox.Text = activeTextBox.Text & "This is text 1"
    End If
              End Sub
    
              Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    
                  If (activeTextBox IsNot Nothing) Then
                  activeTextBox.Text = activeTextBox.Text & "This is the text 2"
    End If
              End Sub
        End Class
    

    【讨论】:

    • 错误是什么?您需要将代码放在方法或事件处理程序中。
    • 我把截图放在上面了。
    • 您遇到的问题是您已将 activeTextBox 的类型转换置于方法或事件处理程序之外的表单级别。实例化表单时将没有“ActiveControl”,因此强制转换不起作用。我已经编辑了示例代码以试图更好地解释它。
    • activeTextBox.Text = CType(Me.ActiveControl, TextBox) 错误:“System.Windows.Forms.TextBox”无法转换为“String”。
    • 您遇到的问题是,一旦单击按钮,文本框就会失去焦点,而按钮会获得焦点。因此,您不能在按钮事件处理程序中使用 Me.ActiveControl,因为这将包含对按钮的引用,而不是文本框。您需要找到一种方法来跟踪获得焦点的最后一个文本框。在 Google 中搜索 TextBox.Enter 和 TextBox.Leave 事件。
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2016-06-15
    相关资源
    最近更新 更多