1

下面是我在文本框KeyDown()事件上按“Enter”时禁用哔声的代码:

if (e.KeyCode == Keys.Enter)
{
    e.SuppressKeyPress = true;
    SaveData();
    e.Handled = true;
}

但是当我在文本框上按“Enter”时它会一直发出哔哔声。我究竟做错了什么?

4

3 回答 3

6

根据您的评论,显示 MessageBox 会干扰您对 SuppressKeyPress 属性的设置。

一种解决方法是将 MessageBox 的显示延迟到方法完成之后:

void TextBox1_KeyDown(object sender, KeyEventArgs e) {
  if (e.KeyCode == Keys.Enter) {
    e.SuppressKeyPress = true;
    this.BeginInvoke(new Action(() => SaveData()));
  }
}
于 2013-10-07T17:19:02.440 回答
2

编辑

请注意,LarsTech 提供的答案(如下)是一种更好的方法。


对不起,我刚刚意识到你有一个 MessageBox 显示。

你可以做的是拥有一个Timer并让它触发该SaveData()方法。

private void Timer1_Tick(System.Object sender, System.EventArgs e)
{
    Timer1.Enabled = false;
    SaveData();
}

然后在您的TextBox按键事件中,执行以下操作:

if (e.KeyCode == Keys.Enter) {
    e.SuppressKeyPress = true;
    Timer1.Enabled = true;
}

这似乎有效...

于 2013-10-07T17:37:44.760 回答
0

You could try creating your own textbox and handle the keydown event like so:

public class MyTextBox : TextBox
{

    protected override void OnKeyDown(KeyEventArgs e)
    {
        switch (e.KeyCode)
        {          
            case (Keys.Return):
              /*
               * Your Code to handle the event
               * 
               */                   
                return;  //Not calling base method, to stop 'ding'
        }

        base.OnKeyDown(e);
    }
}
于 2013-10-07T17:05:25.173 回答