输入按键事件处理程序

zac*_*ack 48 c# wpf user-interface textbox maskedtextbox

我想在输入键被击中时从文本框中捕获文本.我正在使用WPF/visual studio 2010/.NET 4.我不知道在标签中使用什么事件处理程序?我也想为maskedtextbox做同样的事情.

taf*_*afa 93

KeyDown或KeyUp.

TextBox tb = new TextBox();
tb.KeyDown += new KeyEventHandler(tb_KeyDown);

static void tb_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        //enter key is down
    }
}
Run Code Online (Sandbox Code Playgroud)


Stu*_*art 21

您还可以在WPF中使用PreviewKeyDown:

<TextBox PreviewKeyDown="EnterClicked" />
Run Code Online (Sandbox Code Playgroud)

或者在C#中:

myTextBox.PreviewKeyDown += EnterClicked;
Run Code Online (Sandbox Code Playgroud)

然后在附加课程中:

void EnterClicked(object sender, KeyEventArgs e) {
    if(e.Key == Key.Return) {
        DoSomething();
        e.Handled = true;
    }
}
Run Code Online (Sandbox Code Playgroud)


riv*_*riv 7

KeyDown事件仅通过"普通"输入键在标准TextBox或MaskedTextBox中触发,而不是ENTER或TAB等.

通过重写IsInputKey方法,可以获得像ENTER这样的特殊键:

public class CustomTextBox : System.Windows.Forms.TextBox
{
    protected override bool IsInputKey(Keys keyData)
    {
        if (keyData == Keys.Return)
            return true;
        return base.IsInputKey(keyData);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以通过以下方式使用KeyDown事件:

CustomTextBox ctb = new CustomTextBox();
ctb.KeyDown += new KeyEventHandler(tb_KeyDown);

private void tb_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
          //Enter key is down

          //Capture the text
          if (sender is TextBox)
          {
              TextBox txb = (TextBox)sender;
              MessageBox.Show(txb.Text);
          }
    }
}
Run Code Online (Sandbox Code Playgroud)