2012-03-30 144 views
0

我有一個使用WPF的c#程序。我有,當你按下一個鍵,它會點擊一個按鈕,然後禁用該按鈕。我的問題是,一旦我決定點擊一個按鈕,keyDown事件不再被執行。我錯過了什麼嗎?KeyDown事件按下按鈕後退出工作

namespace FindTheCat 
{ 
    public partial class MainWindow : Window 
    { 
     private Treasure treas; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void checkForKitty(object sender, RoutedEventArgs e) 
     { 
      ToggleButton button = (ToggleButton)e.OriginalSource; 

      if(button != null) 
      { 
       button.IsEnabled = false; 

       int loc = getLocation((String)button.Content); 

       if (loc > 0) 
       { 
        isFound(loc); 
       } 
      } 
     } 

     private void checkKey(object sender, KeyEventArgs e) 
     { 
      ToggleButton item = (ToggleButton)GridRoot.FindName(e.Key.ToString()); 
      if (item != null) 
      { 
       item.IsEnabled = false; 
       int loc = getLocation(e.Key.ToString()); 

       if (loc > 0) 
       { 
        isFound(loc); 
       } 
      } 

      MessageBox.Show("Key Pressed"); 
     } 

     private void isFound(int loc) 
     { 
      Boolean found = treas.isFound(loc); 

      if (found) 
      { 
       MessageBox.Show("YAY! You found the cat!"); 
       Reset(); 
      } 
      else 
      { 
       MessageBox.Show("Boo! You did not find the cat!"); 
      } 
     } 

     private int getLocation(String letter) 
     { 
      switch (letter) 
      { 
       case "A": 
        return 1; 
       case "B": 
        return 2; 
       case "C": 
        return 3; 
       case "D": 
        return 4; 
       case "E": 
        return 5; 
       case "F": 
        return 6; 
       case "G": 
        return 7; 
       case "H": 
        return 8; 
       case "I": 
        return 9; 
       case "J": 
        return 10; 
       case "K": 
        return 11; 
       case "L": 
        return 12; 
       case "M": 
        return 13; 
       case "N": 
        return 14; 
       case "O": 
        return 15; 
       case "P": 
        return 16; 
       case "Q": 
        return 17; 
       case "R": 
        return 18; 
       case "S": 
        return 19; 
       case "T": 
        return 20; 
       case "U": 
        return 21; 
       case "V": 
        return 22; 
       case "W": 
        return 23; 
       case "X": 
        return 24; 
       case "Y": 
        return 25; 
       default: 
        return 0; 
      } 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      treas = new Treasure(); 
     } 

     private void Reset() 
     { 
      treas.Reset(); 

      ResetButton("A"); 
      ResetButton("B"); 
      ResetButton("C"); 
      ResetButton("D"); 
      ResetButton("E"); 
      ResetButton("F"); 
      ResetButton("G"); 
      ResetButton("H"); 
      ResetButton("I"); 
      ResetButton("J"); 
      ResetButton("K"); 
      ResetButton("L"); 
      ResetButton("M"); 
      ResetButton("N"); 
      ResetButton("O"); 
      ResetButton("P"); 
      ResetButton("Q"); 
      ResetButton("R"); 
      ResetButton("S"); 
      ResetButton("T"); 
      ResetButton("U"); 
      ResetButton("V"); 
      ResetButton("W"); 
      ResetButton("X"); 
      ResetButton("Y"); 
     } 

     private void ResetButton(String name) 
     { 
      ToggleButton item = (ToggleButton)GridRoot.FindName(name); 

      if (item != null) 
      { 
       item.IsEnabled = true; 
       item.IsChecked = false; 
      } 
     } 
    } 
} 
+3

請添加一些代碼來獲得答案 – Jehof 2012-03-30 13:07:01

+2

是的,你錯過了代碼:) – ABH 2012-03-30 13:10:09

回答

1

禁用的控件不能擁有鍵盤焦點。所以它不會得到任何關鍵事件。

+0

謝謝。我只需要將焦點改回主窗口,它就可以工作 – 2012-03-30 13:35:52