我正在Winforms中构建Dialog
。当你创建它时,它有两个OK和Cancel按钮,这就是我想要的。在这个对话框中,我还有一个TextBox
和一个Sub
(在VB.NET中编码)来处理它的KeyPress
事件。当按下'Enter'键时,我需要发生一些事情。
现在,我已经完成了KeyPress
处理次数和时间。但是,这种情况不同,因为只要按下“Enter”键,对话框就会自动假定您按下“确定”按钮,返回结果并关闭。在运行应用程序时,在Designer和实际表单中,“确定”按钮都是高亮显示,这意味着它始终具有某种焦点(缺少更好的术语)。如何禁用对话框的此功能?当我调试我的代码时,按Enter键甚至没有到达处理KeyPress
事件的子程序。它只是关闭对话框并返回结果,因此我无法单步执行代码并查看幕后发生的情况。
要重述这个问题,我该如何禁用此功能?
干杯! =)
答案 0 :(得分:5)
在“设计视图”中检查表单的属性,确保没有为AcceptButton设置任何内容。
答案 1 :(得分:3)
这是应该工作的方式。您应该将窗体的AcceptButton属性设置为“确定”按钮。它获取胖边框以指示它是默认按钮,当用户按Enter键时,其Click事件会自动运行。如果将按钮的DialogResult属性设置为OK,则它还会自动分配DialogResult属性,以便关闭对话框。
不要修理它。如果要调试它,请在按钮的Click事件处理程序上设置一个中断。如果要阻止它关闭,请重置按钮的DialogResult属性或将窗体的DialogResult属性设置回None。切勿使用KeyPressed事件。
答案 2 :(得分:1)
答案2可以解决问题!
default OK_Button_Click sub
刚刚创建了一个子来处理输入值的变化 - 在我的例子中,它是一个数字输入:
Private Sub SetKey_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetKey.ValueChanged
'Form1 do stuff
End Sub
然后我添加了此代码以将焦点移至“确定”按钮。因此,如果用户想要完成,它可以再次接受Enter并完成对话 - 可选:
Private Sub frmMain_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
If e.KeyChar = Chr(Keys.Enter) Then OK_Button.Focus()
End Sub