Vb.net 使用Form.KeyPreview将按键传递到文本框
我有一个带文本框的Winform 如果用户按下键盘上的一个键,文本应该进入文本框 为了测试文本框是否有焦点,我处理以下两个事件:Vb.net 使用Form.KeyPreview将按键传递到文本框,vb.net,winforms,Vb.net,Winforms,我有一个带文本框的Winform 如果用户按下键盘上的一个键,文本应该进入文本框 为了测试文本框是否有焦点,我处理以下两个事件: Private Sub Textbox1_LostFocus(sender As Object, e As EventArgs) Handles Textbox1.LostFocus _bFocusLost = True End Sub Private Sub Textbox1_GotFocus(sender As Object, e As EventA
Private Sub Textbox1_LostFocus(sender As Object, e As EventArgs) Handles Textbox1.LostFocus
_bFocusLost = True
End Sub
Private Sub Textbox1_GotFocus(sender As Object, e As EventArgs) Handles Textbox1.GotFocus
_bFocusLost = False
End Sub
我已将窗体的KeyPreview设置为True,以便在任何控件之前收到有关按键的通知:
Private Sub frmMain_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If _bFocusLost Then
Me.Textbox1.Focus()
End If
End Sub
这很好,但是第一个键进入涅磐,因为文本框还没有焦点
如何将第一个键传递到文本框
谢谢大家! 首先,正如文档中明确指出的那样,应用程序开发人员不应该处理
LostFocus
或GotFocus
或调用Focus
。您应该处理的事件是Leave
和Enter
,您应该调用的方法是Select
。您的\u bLostFocus
字段完全没有意义,处理任何事件也没有意义。您已经可以使用如果不是Me.TextBox1.Focused,则使用或者如果Me.ActiveControl不是Me.TextBox1,则使用确定该控件是否具有焦点,而不使用任何焦点。你甚至不必测试任何东西,因为你只需调用Me.TextBox1.Select()
,如果控件已经有焦点,它将不会有任何效果。至于这个问题,我觉得你需要确定正确的控件是否有焦点,如果没有,请记住KeyPress
事件。在KeyPress
事件处理程序中,如果右控件未聚焦,则可以确定输入字符是什么,然后适当设置SelectedText
。如果有时间,我会把这个想法充实成一个答案。你只需要Textbox1.AppendText(例如KeyChar.ToString())
,如果你只想在现有文本中添加一个字符(ToString()
,选项Strict On
会让你知道的)。不要调用AppendText
。这假设插入符号将位于现有文本的末尾,这当然不能保证(除非是针对您的特定应用程序)。这就是为什么我说要设置SelectedText
。这样做就像键盘输入一样,即它将在当前插入符号位置插入,并替换当前选定的任何文本。还应该考虑也可以输入控制字符,例如退格和删除。