2013-09-04 162 views
6

tôi cố gắng để bắt F5 trên System.Windows.Forms cho rằng tôi đã viết:Catch KeyUp tổ chức sự kiện trên WinForm C#

partial class MainForm 
{ 
    (...) 
    this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyUp); 
    (...) 
} 

public partial class MainForm : Form 
{ 
    (...) 

    private void MainForm_KeyUp(object sender, KeyEventArgs e) 
    { 
     Log("MainForm_KeyUp"); 
     if (e.KeyCode == Keys.F5) 
     { 
      RefreshStuff(); 
     } 
    } 
} 

Nhưng sự kiện của tôi bắt vẻ không làm việc.

Bạn có biết làm thế nào để cactch EventKey trên System.Windows.Forms?

+0

Trước tiên, bạn có thể thử kiểm tra nó bằng cách thực hiện một cái gì đó như thế này .... ném ngoại lệ mới (e.KeyCode.ToString()); .... Có lẽ điều đó sẽ cho bạn manh mối về mã khóa bạn nên sử dụng. Ngoài ra, hãy chắc chắn sử dụng e.Handled = true; – ismellike

+0

Đặt điểm ngắt trên dòng đầu tiên bên trong 'MainForm_KeyUp' và đảm bảo rằng nó thực sự bị trúng. 'This.KeyUp + = ...' là gì? Ctor? Một phương pháp? Phương pháp đó có thực sự chạy không? Có lẽ bạn đang không thực sự đăng ký với 'sự kiện KeyUp' ... –

+0

@ismellike và Grant Winney, thêm một ngoại lệ hoặc breakpoint là không làm một cái gì đó nhiều hơn nữa. Ngay cả tôi cũng không có thứ gì từ hộp Đăng nhập của mình. Điều đó xác nhận sự kiện không bị bắt. – mickro

Trả lời

9

các keypreview property của mẫu phải được thiết lập là true

Khi thuộc tính này được thiết lập là true, biểu mẫu sẽ nhận được tất cả KeyPress, KeyDown, và các sự kiện KeyUp. Sau khi xử lý sự kiện của form đã hoàn thành xử lý các tổ hợp phím, các phím tắt sau đó được giao cho sự kiểm soát tập trung.

+1

+1 Wow, tôi đã làm việc với 'WinForms' trong một thời gian và không bao giờ biết điều đó. Đã học được điều mới ... –