您应该提取执行添加操作的方法。这不是强制性的,但从处理程序调用方法是一个好习惯,而不是在处理程序中包含一些大代码,例如:
private void addButton_Click(object sender, RoutedEventArgs e)
{
PerformAdd();
}
private void PerformAdd()
{
_op = 1;
temp = displayPannel.Text;
check = true;
}
还有你的实际问题(我假设你想创建类似 Windows Calculator 的东西):
在 MainWindow.xaml 中附加 PreviewKeyDown 的处理程序。在您的情况下,最好使用 PreviewKeyDown,而不是 KeyDown,因为 Preview 事件从“外部到内部”进行,这意味着事件将首先出现在 MainWindow 处理程序中,然后出现在 MainWindow 内控件的处理程序中,而普通事件首先出现在内部类中. 首先在 MainWindow 中捕获事件将允许您全局处理诸如“+”或“-”之类的按键,而无需将它们传递给内部控件。
在处理程序中,您应该检查 KeyCode,并调用适当的方法,如下所示:
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.OemPlus || e.Key == Key.Add)
{
PerformAdd();
e.Handled = true;
}
}
如您所见,有 e.Handled = true; 线。如果您将事件标记为已处理,则不会将其传递给内部控件。您应该将其标记为“操作”按键,这些按键不应作为输入传递给文本框。
编辑:至于数字,你可以这样做:
if (e.Key == Key.D0 || e.Key == Key.NumPad0)
textBox.Text = textBox.Text + "0";