【问题标题】:.NET TextBox - Handling the Enter Key.NET TextBox - 处理 Enter 键
【发布时间】:2010-08-24 16:44:37
【问题描述】:

根据用户在 .NET TextBox 中输入的 Enter 键 (Keys.Enter) 执行操作的最佳方法是什么,假设拥有导致禁止 Enter 键的键输入的所有权文本框本身(e.Handled = true)?

为了这个问题的目的,假设期望的行为不是按下表单的默认按钮,而是应该发生的其他一些自定义处理。

【问题讨论】:

  • 我不明白这个问题。你是问要执行什么动作,还是问如何执行,还是问事件发生时如何通知?
  • 最好的办法就是什么都不做。 Enter 键在 UI 设计中具有明确的含义,不应被篡改。在一种形式中任意使用它来更改焦点,而在另一个对话框中使用 AcceptButton 只会让用户感到困惑。
  • ChrisW:基础知识都非常明显。我在这里追求的是如何处理与幼稚实现相关的警告,例如,如果您有数据绑定 Text 属性,那么当您处理数据源的 KeyDown 事件时'未使用存储在文本框中的值进行更新。 @Hans Passant:我听到了。在这种情况下,它用于与可选(很少使用)其他输入配对的全文搜索框的上下文中。按 Enter 应该会执行搜索。

标签: .net winforms textbox


【解决方案1】:

添加按键事件并捕获回车键

以编程方式看起来有点像这样:

//add the handler to the textbox
this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(CheckEnterKeyPress);

然后在代码中添加处理程序...

private void CheckEnterKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
        if (e.KeyChar == (char)Keys.Return)

        {
           // Then Do your Thang
        }
}

【讨论】:

  • 这里不需要演员表。此外,在对文本框进行数据绑定时,这也无法正常工作,因为在 KeyDown 和 Keys.Return 捕获时数据源尚未更新。
  • 谢谢。你对多余的演员阵容是对的。至于数据绑定的问题,能不能在数据绑定发生后加上keypress事件?或者您可以使用 try/catch 来吞下异常,对吗?
  • 演员阵容现在看起来并不多余;它拒绝编译。
【解决方案2】:

为了将函数与文本框的按键事件联系起来,在表单的designer.cs中添加以下代码:

 this.textbox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OnKeyDownHandler);

现在在同格式的cs文件中定义函数'OnKeyDownHandler':

private void OnKeyDownHandler(object sender, KeyEventArgs e)
{

    if (e.KeyCode == Keys.Enter)
    {
       //enter key has been pressed
       // add your code
    }

}

【讨论】:

    【解决方案3】:

    您可以将其放入 FormLoad 事件中:

    textBox1.KeyPress += (sndr, ev) => 
    {
        if (ev.KeyChar.Equals((char)13))
        {
            // call your method for action on enter
            ev.Handled = true; // suppress default handling
        }
    };
    

    【讨论】:

    • 这不会抑制默认处理。
    • 您只需要添加ev.Handled = true; 更新后的帖子。
    • 也不是检查输入键的最佳方法。
    • 那么最好的方法是什么?
    【解决方案4】:

    如果您希望某个按钮在程序执行时处理 Enter,只需将表单的 AcceptButton 属性指向该按钮即可。

    例如:this.AcceptButton = StartBtn;

    【讨论】:

      【解决方案5】:

      像这样设置 KeyPress 事件:

      this.tMRPpart.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tMRPpart_KeyPress);
      

      然后您可以执行包括检测事件中的“输入”键在内的操作 -

      private void tMRPpart_KeyPress(object sender, KeyPressEventArgs e)
      {
          // force any lower case characters into capitals
          if (e.KeyChar >= 'a' && e.KeyChar <= 'z')
              e.KeyChar -= (char)32;
      
          // If user presses return, tab to next tab stop
          if (e.KeyChar == (char)Keys.Return)
          {
              if (sender is Control)
              {
                  // Move to next control
                  SelectNextControl((Control)sender, true, true, true, true);
              }
          }
      }
      

      在我的例子中,如果用户按下回车键,我希望应用程序跳到下一个字段。

      【讨论】:

        猜你喜欢
        • 2017-08-14
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 2015-08-08
        相关资源
        最近更新 更多