【问题标题】:OK-Cancel Dialog: handling the 'Enter' key pressOK-Cancel Dialog:处理“Enter”键按下
【发布时间】:2011-04-04 22:02:53
【问题描述】:

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

现在,我已经一次又一次地处理KeyPress。但是,这种情况有所不同,因为一旦按下“Enter”键,对话框就会自动假定您正在按下“确定”按钮,返回结果并关闭。在设计器和运行应用程序时的实际表单中,OK 按钮都是突出显示的,这意味着它始终具有某种焦点(因为没有更好的术语)。如何禁用对话框的此功能?当我调试我的代码时,按下回车键甚至不会进入处理KeyPress 事件的子程序。它只是关闭对话框并返回结果,因此我无法真正单步执行代码并查看幕后发生的情况。

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

干杯! = )

【问题讨论】:

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


    【解决方案1】:

    在设计视图中检查表单的属性,确保没有为 AcceptButton 设置任何内容。

    【讨论】:

      【解决方案2】:

      这是它应该工作的方式。您应该将表单的 AcceptButton 属性设置为 OK 按钮。它获取粗边框以指示它是默认按钮,其 Click 事件在用户按 Enter 时自动运行。如果您将按钮的 DialogResult 属性设置为 OK,那么它还会自动分配 DialogResult 属性以便对话框关闭。

      不要修复它。如果要调试它,请在按钮的 Click 事件处理程序上设置中断。如果您想阻止它关闭,请重置按钮的 DialogResult 属性或将表单的 DialogResult 属性设置回 None。永远不要使用 KeyPressed 事件。

      【讨论】:

      • 如果您希望文本框在您按下回车键时获得换行符,则将文本框的 AcceptsReturn 属性设置为 true。现在,当您在 TextBox 中按 Enter 键时,对话框不会关闭。
      【解决方案3】:

      答案 2 可以解决问题!

      default OK_Button_Click sub 中无需更改任何内容

      刚刚制作了一个 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 2015-08-08
        相关资源
        最近更新 更多