2011-11-09 28 views
5

Tôi đang cố gắng để kích hoạt một sự kiện khi người dùng nhấn ctrl - x sử dụng sự kiện KeyDown. Đây hoạt động tốt cho ctrl - D nhưng sự kiện này không xảy ra khi ctrl - x được nhấn. Tôi đoán điều này là do ctrl - x là lệnh "cắt". Có cách nào để kích hoạt sự kiện khi nhấn ctrl - X?chụp Ctrl-X với sự kiện KeyDown của một textbox trong WPF

private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)) 
    { 
     switch (e.Key) 
     { 
      case Key.D: 
       //handle D key 
       break; 
      case Key.X: 
       //handle X key 
       break; 
     } 
    } 
} 
+0

Tại sao bạn không xử lý các lệnh chứ không phải là sự kiện này? –

+0

Làm cách nào để thực hiện điều đó, có cách nào để ghi đè lệnh 'cắt' của TextBox không? – dregan

Trả lời

6

Bạn có thể ghi đè lên các lệnh cắt hiện có:

<TextBox> 
    <TextBox.InputBindings> 
     <KeyBinding Key="X" Modifiers="Control" Command="{Binding TestCommand}" /> 
    </TextBox.InputBindings> 
</TextBox> 

Bạn cần phải tạo một command mặc dù.

+0

Cảm ơn, tôi không thể nhận được điều này để làm việc trong xaml (thậm chí tạo ra một thuộc tính phụ thuộc cho lệnh) nhưng nó hoạt động tốt trong mã phía sau. – dregan

-1

thử sau đây trong sự kiện KeyDown

 if (e.Control == true && e.KeyCode==keys.x) 
     { 
      e.Handled = true; 
      textBox1.SelectionLength = 0; 
      //Call your method 
     } 
+0

Tôi giả sử rằng đối tượng e là KeyEventArgs. Điều này dường như không có thuộc tính Control hoặc KeyCode. Xem chỉnh sửa của tôi ở trên để biết mã. Sự kiện sẽ kích hoạt phím 'ctrl' nhưng không kích hoạt khi phím 'x' được nhấn trong khi giữ phím 'ctrl' – dregan

+0

bạn đã thêm wpf sau khi tôi đăng câu trả lời của mình đó là lý do tại sao một số nhầm lẫn –

9

Để làm điều đó trong WPF Tôi cố gắng này:

private void HandleKeyDownEvent(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.X && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
    { 
     MessageBox.Show("You press Ctrl+X :)"); 
    } 
} 
+0

Tại sao bạn đã viết: if (e.Key == Key.X && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) {} thay if (e.Key == Key. X & & nbsp; –

Các vấn đề liên quan