2012-08-05 50 views
2

我在MS Visual Studio 2010中使用WPF应用程序制作了一个计算器。我制作了标准计算器中的不同按钮,并在其中添加了button_Click方法。现在我还想执行与button_Click方法通过抚摸特定键执行相同的任务。在C#中为ADD按钮指定“+”键

对于实例

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

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

现在,如果我想要的“+”键做的计算器一样的东西,而不是使用鼠标点击“+”按钮。另外我想使用数字键以及鼠标点击。我该怎么做?

+0

挂钩的按键事件在窗口上 – 2012-08-05 20:56:05

+0

它显示是KeyDown和KEYUP唯一可用的方法,也是我应该写在KeyPress事件? – Reaper211 2012-08-05 20:58:49

回答

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"/> 
+0

我应该添加我的代码以更精确? – Reaper211 2012-08-05 21:16:23

+0

我似乎无法得到它的工作。 – Reaper211 2012-08-05 21:21:09

+0

这工作TOOO! :D – Reaper211 2012-08-05 21:38:58

2

你应该提取方法,做添加操作。这不是强制性的,但它是一个很好的做法,呼吁从左撇子方法,而不是有内部处理一些大的代码,例如:

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

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

您的实际问题(我假设在这里你要创造这样Windows计算器):

  1. 为MainWindow.xaml中的PreviewKeyDown附加处理程序。因为预览事件从“外部到内部”发生,意味着事件首先在MainWindow处理程序中显示,然后在MainWindow中的控件的处理程序中显示,而正常事件首先显示在内部类中时,最好使用PreviewKeyDown,而不是在您的案例中使用KeyDown。 。首先在MainWindow中捕获事件将允许您全局处理按键“+”或“ - ”,而不将它们传递给内部控件。

  2. 在处理您应该检查邀请码,并调用适当的方法,如:你可以看到有e.Handled =真实

    private void Window_PreviewKeyDown(object sender, KeyEventArgs e) 
         { 
          if (e.Key == Key.OemPlus || e.Key == Key.Add) 
          { 
           PerformAdd(); 
           e.Handled = true; 
          } 
         } 
    

;线。如果您将事件标记为已处理,则不会将其传递给内部控件。您应该将其标记为'操作'键按下,这些按键不应作为输入传递给文本框。

编辑:至于号码,你可以这样做:

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

非常感谢你!^_ ^它工作。如何将事件添加到数字键? – Reaper211 2012-08-05 21:39:37

+0

谢谢,这有很大的帮助。 – Reaper211 2012-08-05 22:36:01