Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Bắt sự kiện Key Press khi form có nhiều UserControl lồng vào nhau

00:53 15-06-2017 1.587 lượt xem 2 bình luận 01:12 17-06-2017

Cho em hỏi:

+ Ví dụ em có 1 form A chứa 1 user control là B

+ Trong B em add thêm 1 user control nữa là C 

+ Trong C em có mấy cái button, text box, .... 

- Cho em hỏi có cách nào bắt được sự kiện key Press của C không vậy ạ . Em thử dùng focus hoặc event key press của C rồi mà  không được. 

              + Em cũng thử bắt key press / down của B hay A cũng không được

 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Trần Thành Vi Thanh Member đã bình luận 01:12 17-06-2017

1. Nếu bạn muốn bắt sự kiện liên quan đến key cho form thì cần set thuộc tính this.KeyPreview = true trước.

2. Còn nếu trên UserControl thì tuỳ vào vấn đề của bạn mà dùng thủ thuật thôi chứ hồi đó mình mò cái này thì biết là UserControl không có thuộc tính KeyPreview và muốn bắt sự kiện liên quan đến key cần override lại hàm ProcessKeyPreview. Ví dụ:

const int WM_KEYDOWN = 0x100; // mỗi thông điệp trong Windows đều có 1 mã hexa. 0x100 là mã cho thông điệp KeyDown.
const int WM_KEYUP = 0x101; // tương tự cho KeyUp
        
protected override bool ProcessKeyPreview(ref Message m)
{
      if (m.Msg == WM_KEYDOWN) // nếu thông điệp là keydown
      {
           // Xử lý sự kiện KeyDown
           MessageBox.Show("Key down in C");
      }

      return base.ProcessKeyPreview(ref m);
}

Lưu ý là để sự kiện xảy ra thì UserControl cần được focus.

K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 06:28 15-06-2017

KeyPress chỉ raise trên control được focus nhé bạn

Câu hỏi mới nhất