在C#中为ADD按钮分配“+”键

时间:2012-08-05 20:54:00

标签: c# visual-studio-2010 events event-handling

我正在使用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;
    }

现在如果我想要“+”键在计算器中执行相同操作而不是使用鼠标单击“+”按钮。此外,我也希望使用数字键以及鼠标单击。我该怎么办?

2 个答案:

答案 0 :(得分:2)

MainWindow.xaml.cs

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

MainWindow.xaml

    <TextBox Text="Hello" PreviewKeyUp="TextBox_PreviewKeyUp_1"/>

答案 1 :(得分:2)

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

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

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

你的实际问题(我在这里假设你想创建类似Windows计算器的东西):

  1. 在MainWindow.xaml中附加PreviewKeyDown的处理程序。在你的情况下,最好使用PreviewKeyDown,而不是KeyDown,因为预览事件从“从外到内”,这意味着事件将首先显示在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;
                 }
             }
    
  3. 你可以看到e.Handled = true;线。如果将事件标记为已处理,则不会将其传递给内部控件。您应该将其标记为“操作”按键处理,这些按键不应作为输入传递到文本框。

    编辑:至于数字,你可以这样做:

     if (e.Key == Key.D0 || e.Key == Key.NumPad0)
          textBox.Text = textBox.Text + "0";