quá dài cho một bình luận, bao gồm liên kết, và mã ... nhưng đây là một nhận xét ...
Rất nhiều người đã phàn nàn về một usercontrol không bắn các GotFocus() sự kiện'. Ví dụ: UserControl and GotFocus() fyi: LostFocus() sẽ kích hoạt như mong đợi, theo kinh nghiệm của tôi. Trong quá khứ, trong một dự án nhiều Biểu mẫu, tôi đã thử nghiệm với việc thực hiện 'Nhập và' Để xử lý sự kiện trên UserControl trên mỗi Biểu mẫu và thấy rằng 'Enter chỉ được gọi trên Tải biểu mẫu một lần.
Hiển nhiên các điều khiển trên UserControl "tập trung" (theo cách tôi không thể giải thích, nhưng có lẽ một trong những người dùng WinForms của SO sẽ). Có lẽ điều này liên quan đến thực tế là UserControl xuống từ ContainerControl?
tôi đã thử nghiệm với văn bản một 'GotFocus() xử lý:
private void Control_GotFocus(object sender, EventArgs e)
{
Console.WriteLine("Control GotFocus : " + ((sender as Control).Name));
}
Và sau đó, trong UserControl' sự kiện Load, dây lên tất cả các điều khiển trên UserControl để mà xử lý sự kiện: những gì tôi quan sát được là Kiểm soát trên UserControl với TabIndex thấp nhất sẽ kích hoạt sự kiện GotFocus ngay khi khởi chạy ứng dụng và khi chuyển đổi giữa các Biểu mẫu.
Điều duy nhất tôi đã thấy trong trường hợp này là đảm bảo 'thuộc tính IsTabStop của UserControl được đặt thành' Đúng: đây là từ Shawn Wildermuth tại MS trong ngữ cảnh của câu hỏi liên quan đến SilverLight, vì vậy không có ý tưởng nếu điều này có thể áp dụng trong trường hợp của bạn.
Một đề xuất khác, đó là viết trình xử lý sự kiện MouseDown hoặc MouseClick cho UserControl và trong cuộc gọi đó: this.SetFocus();
dẫn tôi đến hư không.
Hy vọng bạn nhận được câu trả lời!
Điều này dường như thực hiện công việc. Tôi sẽ tiếp tục chơi xung quanh với nó để phân loại ra những phức tạp mà bạn đã đề cập. Cảm ơn! – Sambo
+1 Vui mừng khi có một câu trả lời tuyệt vời khác từ NoBugz. Tò mò: trong trường hợp này bạn có nghĩ rằng OP có thể làm tốt hơn bằng cách sử dụng Biểu mẫu thay vì UserControl không? – BillW
@Bill: Lớp Form cũng là một điều khiển container, mặc dù nó sẽ không chiến đấu theo cùng một cách. Lời khuyên của tôi sẽ phải tránh thực hành UI không chuẩn. Nó cũng gây nhầm lẫn cho người dùng. –