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