确定 - 取消对话框:按下“输入”键

时间:2011-04-04 22:02:54

标签: .net vb.net visual-studio dialog

我正在Winforms中构建Dialog。当你创建它时,它有两个OK和Cancel按钮,这就是我想要的。在这个对话框中,我还有一个TextBox和一个Sub(在VB.NET中编码)来处理它的KeyPress事件。当按下'Enter'键时,我需要发生一些事情。

现在,我已经完成了KeyPress处理次数和时间。但是,这种情况不同,因为只要按下“Enter”键,对话框就会自动假定您按下“确定”按钮,返回结果并关闭。在运行应用程序时,在Designer和实际表单中,“确定”按钮都是高亮显示,这意味着它始终具有某种焦点(缺少更好的术语)。如何禁用对话框的此功能?当我调试我的代码时,按Enter键甚至没有到达处理KeyPress事件的子程序。它只是关闭对话框并返回结果,因此我无法单步执行代码并查看幕后发生的情况。

要重述这个问题,我该如何禁用此功能?

干杯! =)

3 个答案:

答案 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