Tôi có một TextBox control trên Form của tôi. Tôi sử dụng sự kiện Rời khỏi trên điều khiển để xử lý dữ liệu nhập của người dùng. Nó hoạt động tốt nếu người dùng nhấp vào một số điều khiển khác trên biểu mẫu, nhưng thậm chí không bị sa thải khi người dùng đi thẳng đến menu chính. Bất kỳ ý tưởng nào tôi nên sử dụng để kích hoạt nó mọi lúc?WinForms: Textbox Leave event không bị sa thải sau khi vào menu chính
Trả lời
Tôi tìm thấy một workaround hợp lý, tôi đặt trọng tâm trên menu chính bằng tay:
EDIT: Theo đề nghị của @TcKs, tôi đã thay đổi sự kiện từ ItemClicked để MenuActivate. Cảm ơn rất nhiều vì đã giúp đỡ!
private void menuStrip1_MenuActivate(object sender, EventArgs e)
{
menuStrip1.Focus();
}
Bạn nên sử dụng các sự kiện "Đang xác thực" và "Đã xác thực" để kiểm tra dữ liệu nhập của người dùng. Sau đó, nếu người dùng truy cập điều khiển khác "A" và điều khiển "A" có thuộc tính "CausesValidating" được đặt thành "true" (giá trị mặc định của nó), sự kiện "Xác thực" và "Đã xác thực" sẽ được kích hoạt.
Menu cũng có thuộc tính "CuasesValidating".
Chỉnh sửa: Xin lỗi, tôi quên "CuasesValidating" trong dải trình đơn là chức năng của chúng tôi và không được tích hợp sẵn. Nhưng việc kiểm tra để phê chuẩn là khá đơn giản:
private void menuStrip1_MenuActivate(object sender, EventArgs e) {
bool ret = this.Validate(false);
if (false == ret) {
// user's input is wrong
}
}
tài khoản bất kỳ ContainerControl thay vì "này", nếu bạn muốn kiểm tra xác nhận trong kiểm soát khác so với hình thức "này". Ví dụ trong MDI Child window.
khi chơi với một menu, bạn phải mô phỏng, bằng cách nào đó, một lostfocus và có thể ghi nhớ nơi nó được trong trường hợp bạn đóng menu mà không làm bất cứ điều gì để tập trung sẽ trở lại vào textbox
Có một số trường hợp khi Lostfocus không được kích hoạt, ví dụ như nhấp vào các nút trên thanh công cụ và các mục menu. Tôi sử dụng để giải quyết vấn đề này với biến "LastControl" cục bộ và tự xử lý khi menu được lấy nét.
Có nhiều lý do khiến việc nhấp vào menu không làm mất tiêu điểm của hộp văn bản. Ví dụ: nếu bạn muốn có trình đơn "Chỉnh sửa" có "Dán", "Dán" sẽ hành động dựa vào điều khiển đã tập trung và do đó, nó không được lấy tiêu điểm từ bất kỳ điều khiển nào trên biểu mẫu.
Vì vậy, trình đơn có thể được xem dưới dạng menu ngữ cảnh không lấy tiêu điểm từ điều khiển.
Đủ công bằng mà thực đơn không nên lấy nét từ điều khiển - nhưng mặt khác không có cơ chế để xử lý kịch bản của tôi một cách hợp lý đơn giản. Phương pháp của bạn là OK trong các trường hợp đơn giản, nhưng tôi có một hệ thống phân cấp các điều khiển người dùng được sử dụng trên các biểu mẫu khác nhau, vì vậy tôi thực sự không thể có LastControl – Grzenio
Vâng, tôi đã sẵn sàng đăng một ví dụ được tự động chuyển tiếp InvokeLostFocus (LastControl) khi Menu đã được kích hoạt. Nhưng sau đó tôi thấy workaround của bạn với menustrip1.focus() vì vậy tôi đã không. ;) – Stefan
bạn cần một nhãn 1 pixel mỗi 1 pixel
Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Leave
MsgBox("yes")
End Sub
Private Sub MenuStrip1_MenuActivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuStrip1.MenuActivate
CType(sender, MenuStrip).Tag = ActiveControl
Label1.Focus()
End Sub
Private Sub MenuStrip1_MenuDeactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuStrip1.MenuDeactivate
If CType(sender, MenuStrip).Tag Is Control AndAlso CType(CType(sender, MenuStrip).Tag, Control).CanFocus Then
CType(CType(sender, MenuStrip).Tag, Control).Focus()
End If
CType(sender, MenuStrip).Tag = Nothing
End Sub
- 1. Nested DialogFragment bị sa thải sau khi luân chuyển
- 2. khi nào window.onload bị sa thải
- 3. dán kiện bị sa thải trước khi văn bản là trong textbox
- 4. Rowcommand không sa thải sau khi nút nhấn
- 5. Khi nào thì OnActivation của Ninject bị sa thải?
- 6. Rails lồng thuộc tính con callbacks không bị sa thải
- 7. iOS 6 safari, setInterval không bị sa thải
- 8. sự kiện nhấp chuột bị sa thải hai lần - jquery
- 9. Sự kiện trang không bị sa thải ở tất cả
- 10. OnClientClick sa thải trước khi ValidationGroup
- 11. Cách nào mà TAction đã bị sa thải?
- 12. ProgressDialog sa thải trong android
- 13. IOS: sa thải hai viewController
- 14. Symfony2: PrePersist/PreUpdate vòng đời-sự kiện không bị sa thải
- 15. Android WebView tải hộp thoại không được sa thải
- 16. Lấy tên (type) của sự kiện đó đã bị sa thải (kích hoạt)
- 17. giá trị Nhận các yếu tố trên mà sự kiện này bị sa thải
- 18. chặn DialogFragment sa thải bên trong hoạt động
- 19. Trình xử lý thành công của bộ nạp Extjs không bị sa thải
- 20. ExecuteCore() trong lớp cơ sở không bị sa thải trong MVC 4 beta
- 21. textfieldDidEndEditing không bị sa thải khi tôi kết thúc chỉnh sửa, và chọn một uicontrol hơn textfield
- 22. Custom Caret cho WinForms TextBox
- 23. MonoTouch.Dialog: Sa thải bàn phím bằng cách chạm vào bất cứ nơi nào trong DialogViewController
- 24. Winforms, databinding, Listbox và textbox
- 25. Sự kiện WinForms cho tiêu điểm TextBox?
- 26. Các GridView 'GridView1' PageIndexChanging sự kiện sa thải mà không được xử lý
- 27. Các GridView 'PendingRecordsGridview' RowDeleting sự kiện sa thải mà không được xử lý
- 28. C# WinForms - Giữ một ContextMenu đóng sau khi nhấp vào một số mục nhất định
- 29. Cảnh báo sa thải bằng cách sử dụng Twitter Bootstrap không hoạt động?
- 30. Làm thế nào để tìm thấy ngày lịch sử khôn ngoan các lệnh linux bị sa thải
Nó chỉ hoạt động cho chuột chứ không phải cho bàn phím. Vui lòng xem chỉnh sửa của tôi. – TcKs