Vb.net Visual Basic-对具有焦点的对象执行操作

Vb.net Visual Basic-对具有焦点的对象执行操作,vb.net,focus,Vb.net,Focus,我试着做一些非常简单的事情: 在我的表单中创建一个处理多个textbox.gotFocus事件的方法。 目标是在焦点被赋予任何文本框时选择所有文本 我知道我可以创建一个if-else块来检查每个文本框是否有焦点,如果有,只需执行textbox1.selectall或textbox2.selectall等操作 有没有一种更快的方法可以做到这一点,而我却没有,那就是在一个语句中使用object.focused.selectall之类的语句来完成所有的工作?我知道这些不是vb中的关键词,但它们是我能想

我试着做一些非常简单的事情: 在我的表单中创建一个处理多个textbox.gotFocus事件的方法。 目标是在焦点被赋予任何文本框时选择所有文本

我知道我可以创建一个if-else块来检查每个文本框是否有焦点,如果有,只需执行textbox1.selectall或textbox2.selectall等操作

有没有一种更快的方法可以做到这一点,而我却没有,那就是在一个语句中使用object.focused.selectall之类的语句来完成所有的工作?我知道这些不是vb中的关键词,但它们是我能想到的最好的描述性词汇,用来解释我要做的事情


欢迎您的任何意见。谢谢

你想做的事情比你想象的要复杂。您必须创建一个事件来触发处理文本框焦点的方法。简单的方法是在每个文本框gotFocus事件中使用selectAll方法

除非您自己从文本框继承并调用OnEnter override方法中的SelectAll,否则没有内置的功能来实现这一点

如果您有很多TextBox控件,您可以迭代集合并自己添加方法:

Public Sub New()
  InitializeComponent()

  Dim ctrls As New Stack(Of Control)
  ctrls.Push(Me)
  While ctrls.Count > 0
    Dim ctrl As Control = ctrls.Pop
    If ctrl.Controls.Count > 0 Then
      For Each c As Control In ctrl.Controls
        ctrls.Push(c)
      Next
    Else
      If TypeOf ctrl Is TextBox Then
        AddHandler ctrl.Enter, Sub() DirectCast(ctrl, TextBox).SelectAll()
      End If
    End If
  End While
End Sub

因为textbox没有焦点事件,所以可以设置一个处理程序来处理所有textbox的Enter事件

输入事件处理程序

Private Sub TextboxEnter(Sender As Object, E As EventArgs)
    Dim FocusedTextbox As TextBox = DirectCast(Sender, TextBox)
    FocusedTextBox.SelectAll
End Sub
为每个文本框的Enter事件添加处理程序

For Each tb As TextBox in Me.Controls.OfType(Of TextBox)
    AddHandler tb.Enter, AddressOf TextBoxEnter
Next
如果需要筛选文本框,请使用通用名称模式并使用条件在name属性中检查该模式