我有一个简单的VB.Net Windows窗体应用程序,它有两个TextBox和一个Button,它是表单的AcceptButton。唯一的代码是在ButtonClick上,并使用Leave事件验证每个TextBox。 (我也尝试了LostFocus事件,它似乎也一样)。我的问题是,如果我用鼠标单击按钮,那么用户所在的TextBox会发生正确的Leave(或LostFocus)事件,但如果按Enter键,焦点不会丢失,因此该TextBox的代码会不跑。
如何使Enter键的行为与点击表格的AcceptButton相同?
答案 0 :(得分:0)
当您单击Enter键时,您正在从文本框失去焦点到按钮?! 如果是这样,你可以试试这个:
Protected Overrides Function ProcessCmdKey(ByRef sMessage As Message, ByVal oKeyData As Keys) As Boolean
If oKeyData = Keys.Enter Then
Me.Textbox1.Focus()
AcceptButton.PerformClick()
Return True
ElseIf oKeyData = Keys.Escape Then
Application.Exit()
Return True
Else
Return MyBase.ProcessCmdKey(sMessage, oKeyData)
End If
End Function
我希望这能帮到你;)
答案 1 :(得分:0)
我同意Plutonix - 为什么不在click事件中对两个文本框进行验证? (除非这是出于教育目的?)
如果你真的想在文本框中验证'离开事件,您需要在当前文本框中进行验证,才能在按Enter键之前按钮执行,然后您需要按键事件才能处理两个文本框的按键操作。在那里,检查按下的键是否输入,如果是,那么你可以得到有焦点的文本框...称之为“离开”事件,然后调用按钮的点击事件。 / p>
这有意义吗?
答案 2 :(得分:0)
当您直接点击该按钮时,会有一系列事件,包括TextBox.LostFocus
,TextBox.Leave
,Button.MouseEnter
,Button.Click
但是当你按Enter键时,它就是拦截按键的表格,如果它是Enter并且有一个AcceptButton,那么启动它的PerformClick
方法而不会引发大部分事件。
您可以轻松验证;通过设计器将Button的DialogResult设置为一个值,并在将DialogResult更改为另一个值时处理Button的GotFocus事件。
然后测试你的代码(存储Form.ShowDialog
的结果);直接点击你将获得在GotFocus上设置的值,因为它是在Click the form设置它的DialogResult按钮的DialogResult值;按下输入你将得到最初的Dialogresult(设计师一个)有效地证明没有输入GotFocus。
回到当前的问题;为了解决这个问题,您需要在Validating
(或Validated
)事件中处理您的验证;确保您的文本框CauseValidation
设置为true [默认值],否则不会引发这些事件。你可以在它们里面设置e.Cancel
(使用EN的CancelEventArgs参数)为true来停止验证(和事件链)有效地将焦点放在“无效”控件内(这也会阻止按钮点击任何使用的方式到达它)
一个例子:这个表单有两个Textboxes和一个Button作为Form的AcceptButton并“验证”它的输入,因此不允许空TextBox.Text
Public Class NonEmptyTextBoxesForm
Private Sub TextBoxes_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating, TextBox2.Validating
Dim tb = DirectCast(sender, TextBox)
e.Cancel = tb.Text = "" ' e.Cancel = (tb.Text = "") ' if that's make this clearer
End Sub
End Class
答案 3 :(得分:0)
如何使Enter键的行为与单击表单的AcceptButton相同?
要使ENTER键的行为与单击“接受”按钮相同,您可以使用表单的ACCEPTBUTTON属性,并在按下ENTER键时指定要单击的按钮。
虽然这会导致按钮的click事件中的代码被执行, 我不知道TEXTBOX-LOSTFOCUS事件中的代码是否会执行!
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'
' Assign default button for ENTER key (Okay Button)
Me.AcceptButton = Me.MyOkayButton
'
' Assign default button for ESCAPE key (Cancel Button)
Me.CancelButton = Me.MyCancelButton
'
End Sub