2009-11-25 69 views
10

Có cách nào để khởi động phương thức trong C# nếu nhấn một phím? Ví dụ: Esc?Bấm phím Escape để gọi phương thức

+3

sử dụng cái gì? Console? Hình thức? ASP.NET? – Gregoire

+0

Tôi đang sử dụng biểu mẫu – raimis

+0

Lưu ý rằng nếu biểu mẫu của bạn có cấu hình ['CancelButton'] (http://msdn.microsoft.com/library/system.windows.forms.form.cancelbutton.aspx), sau đó nhấn ** ESC ** sẽ tự động nhấp vào nút này. Tùy thuộc vào yêu cầu của bạn, đây có thể là một cách tiếp cận tốt. –

Trả lời

3

Tôi đang viết ứng dụng WinForms. Người dùng điền vào hộp văn bản và nếu ông muốn xóa tất cả mọi thứ, anh chỉ cần nhấp chuột esc trên bàn phím

Tôi nghĩ rằng bạn cần phải xử lý the KeyDown event.

+2

Bạn cũng sẽ muốn đặt thuộc tính biểu mẫu 'KeyPreview' thành ** True ** để nắm bắt các sự kiện KeyPress – whiteshooz

1

Bạn đang viết ứng dụng Bảng điều khiển, ứng dụng WinForms hay cái gì khác? Có phải bạn đang cố gắng giữ phím ESC mọi lúc (bất kể cửa sổ/ứng dụng tập trung) hay cái gì khác?

Cần thêm ngữ cảnh.

Nếu bạn đang viết một ứng dụng Console, sau đó bạn nên bắt đầu xem xét những thứ như Console.ReadKey ...

http://msdn.microsoft.com/en-us/library/system.console.readkey.aspx

+0

Tôi đang viết ứng dụng WinForms. Người dùng điền vào hộp văn bản và nếu anh ta muốn xóa tất cả mọi thứ, anh ta chỉ cần bấm phím esc trên bàn phím – raimis

19

sử dụng tổ chức sự kiện OnKeyPress của textbox của bạn và trong trường hợp

if(e.KeyCode==Keys.Escape) 
{ 
    yourTextBox.Text = string.Empty; 
} 
+5

vui, điều này dường như không hoạt động chút nào, và nó có năm phiếu bầu? 'private void Form1_KeyDown (đối tượng người gửi, KeyEventArgs e) { nếu (e.KeyCode == Keys.Escape) {...' Tác phẩm này. Nhưng e.KeyChar là một kiểu ký tự, Keys.Escape không phải là và toán tử == không thể được áp dụng. –

+0

@MasterPeter thực sự, đó là Mã khóa ... – Gregoire

+5

để làm việc mã này cần phải Form.KeyPreview = true; –

11

Như những người khác đã đề cập, xử lý sự kiện KeyDown hoặc KeyUp của điều khiển thích hợp. Sự kiện này KeyPress sẽ làm việc cho phím thoát là tốt, mặc dù nó sẽ không kích hoạt cho một số phím, chẳng hạn như phím Shift, Ctrl hay Alt.

Nếu bạn muốn thực thi chức năng này bất cứ khi nào người dùng nhấn phím Escape, thì có thể bạn muốn xử lý sự kiện trên Biểu mẫu. Nếu bạn làm điều này, bạn có thể cũng muốn đặt thuộc tính của Form là KeyPreview thành true. Điều này sẽ cho phép điều khiển Biểu mẫu nhận sự kiện ngay cả khi tiêu điểm hiện nằm trong một trong các điều khiển con.

Nếu bạn muốn hành vi cụ thể cho điều khiển, chẳng hạn như xóa văn bản trong hộp văn bản hiện có tiêu điểm, bạn nên xử lý sự kiện KeyDown hoặc KeyUp của điều khiển TextBox. Bằng cách này, trình xử lý sự kiện của bạn sẽ không được kích hoạt nếu người dùng nhấn phím thoát bên ngoài hộp văn bản.

Trong một số trường hợp, bạn có thể muốn ngăn điều khiển con xử lý cùng sự kiện mà bạn vừa xử lý. Bạn có thể sử dụng SuppressKeyPress tài sản trên lớp KeyEventArgs để kiểm soát hành vi này:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Escape) 
    { 
     MessageBox.Show("Escape key pressed"); 

     // prevent child controls from handling this event as well 
     e.SuppressKeyPress = true; 
    } 
} 
+1

Cảm ơn gợi ý hữu ích cho KeyPreview! – Peopleware

2

Bạn cần phải chuyển đổi hình thức sở hữu "KeyPreview" true hoặc các sự kiện của bạn sẽ không bị sa thải. Việc xử lý những sự kiện này một mình sẽ không làm bất cứ điều gì mặc dù các sự kiện là chính xác. Nó sẽ xem xét cho bạn như không có gì thực sự xảy ra ngay cả khi bạn đã đăng ký xử lý sự kiện thích hợp.

0

Với tổ chức sự kiện KeyPress ...

//Escape 
    if (e.KeyChar == '') 
    { 
      this.DialogResult = DialogResult.Cancel; 
      e.Handled = true; 
    } 
+5

'(char) Keys.Escape' giống với' '\ x1B'' giống với '(char) 27' nhưng ** không giống với **'' '' – xmojmr

0

Bạn cũng có thể sử dụng sự kiện KeyUp. Tôi thích nó.

private void Window_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) { 
    if (e.Key == Key.Escape) { 
     //WHAT WILL HAPPEN INSERT HERE 
    } 
} 
1

đầu tiên trong Thuộc tính làm> KeyPreview: True

Sau đó:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Escape) 
     { 
      //call your method here 
     } 
    } 
2

Trong trường hợp ai đó đang tìm kiếm cách để làm điều đó trong một ứng dụng console

if (Console.ReadKey().Key == ConsoleKey.Escape) 
{ 
    return; 
} 
Các vấn đề liên quan