2

我正在使用 MS Visual Studio 2010 中的 WPF 应用程序制作计算器。我制作了标准计算器中的不同按钮,并在它们上添加了 button_Click 方法。现在我还想通过敲击特定键来执行与 button_Click 方法相同的任务。

例如

我有“addButton_Click”方法,它执行这个:

    private void addButton_Click(object sender, RoutedEventArgs e)
    {
        _op = 1;    
        temp = displayPannel.Text;
        check = true;
    }

现在,如果我想让“+”键在计算器中做同样的事情,而不是使用鼠标单击“+”按钮,该怎么办?我也想使用数字键以及鼠标点击。我该怎么做?

4

2 回答 2

2

主窗口.xaml.cs

  private void TextBox_PreviewKeyUp_1(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.OemPlus || e.Key == Key.Add)
            MessageBox.Show("Tada");
    }

主窗口.xaml

    <TextBox Text="Hello" PreviewKeyUp="TextBox_PreviewKeyUp_1"/>
于 2012-08-05T21:05:45.287 回答
2

您应该提取执行添加操作的方法。这不是强制性的,但从处理程序调用方法是一个好习惯,而不是在处理程序中包含一些大代码,例如:

    private void addButton_Click(object sender, RoutedEventArgs e)
    {
        PerformAdd();
    }

    private void PerformAdd()
    {
        _op = 1;
        temp = displayPannel.Text;
        check = true;
    }

还有你的实际问题(我假设你想创建类似 Windows Calculator 的东西):

  1. 在 MainWindow.xaml 中附加 PreviewKeyDown 的处理程序。在您的情况下,最好使用 PreviewKeyDown,而不是 KeyDown,因为 Preview 事件从“外部到内部”进行,这意味着事件将首先出现在 MainWindow 处理程序中,然后出现在 MainWindow 内控件的处理程序中,而普通事件首先出现在内部类中. 首先在 MainWindow 中捕获事件将允许您全局处理诸如“+”或“-”之类的按键,而无需将它们传递给内部控件。

  2. 在处理程序中,您应该检查 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";
于 2012-08-05T21:33:41.490 回答