C#keyup事件问题

时间:2016-07-25 21:48:56

标签: c# winforms

我使用keyup事件添加按下输入光标移动到下一个控件的功能。这个事件有效,但是我在TextBox中输入了一些内容,然后按下enter cursor move to next control,但我在前一个控件中键入的字母是清晰的。我没有在我的代码中的任何地方添加clear函数。 这是代码:

    private void nametextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if(e.KeyCode == Keys.Enter)
        {
            this.SelectNextControl(nametextBox, true, true, true, true);
        }
    }

    private void emailtextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            this.SelectNextControl(agetextBox, true, true, true, true);
        }

    }

1 个答案:

答案 0 :(得分:4)

e.Handled标记设置为true以防止我怀疑正在向控件添加新行并隐藏文本的默认键操作:

    if(e.KeyCode == Keys.Enter)
    {
        this.SelectNextControl(nametextBox, true, true, true, true);
        e.Handled = true;
    }

您需要覆盖ProcessCmdKey,以防止输入新行并隐藏文字。 (或者,如果适合您,您可以将文本框设置为单行)。否则,将其添加到您的Window逻辑:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Enter)
        return true;
    return base.ProcessCmdKey(ref msg, keyData);
}

返回true将标记不应执行默认命令。这将影响窗口中的所有控件,但这意味着您需要在需要时手动添加换行功能。

我是否还可以建议您为每个关键事件使用相同的处理程序,除非您有任何不同的处理方式添加到每个事件。您可以通过将发件人作为Control而不是手动传递每个控件来执行此操作:

private void Control_KeyUp(object sender, KeyEventArgs e)
{
  if(e.KeyCode == Keys.Enter)
      if(sender is Control)
          this.SelectNextControl((Control)sender, true, true, true, true);
}