Tôi đã rối tung xung quanh với PreviewLostKeyboardFocus
mà hầu như giúp bạn ở đó. Tôi đã nhìn thấy một vài triển khai sử dụng LostFocus
, nhưng điều đó chỉ tập trung trở lại trên TextBox
sau khi nó bị mất tiêu điểm và bạn có thể dễ dàng nhìn thấy sự dịch chuyển này trên màn hình. Về cơ bản, tôi chỉ tìm kiếm cùng một loại hành vi mà bạn có thể nhận được bằng cách sử dụng OnValidating
trong WinForms.Cách tốt nhất để tránh mất tiêu điểm TextBox khi có lỗi xác thực là gì?
Trả lời
Theo tôi, cách tốt nhất thường không được thực hiện. Nó gần như luôn luôn tốt hơn để chỉ vô hiệu hóa các điều khiển khác hoặc ngăn chặn tiết kiệm cho đến khi giá trị là hợp lệ.
Nhưng nếu thiết kế của bạn thực sự cần khả năng này, đây là những gì bạn nên làm:
Intercept phiên bản
Preview
của bàn phím và chuột sự kiện ở cấp cửa sổ của bạn, hoặc bất cứ điều gì phạm vi bạn muốn ngăn chặn những thay đổi tập trung bên trong (ví dụ: có thể không phải thanh trình đơn của bạn).Khi phát hiện phím TabDown hoặc Return KeyDown trong hộp văn bản hoặc khi phát hiện MouseDown bên ngoài hộp văn bản trong khi nó có tiêu điểm, hãy gọi UpdateSource() trên biểu thức ràng buộc, sau đó nếu xác thực không thành công set Handled = true để ngăn sự kiện KeyDown hoặc MouseDown bị xử lý thêm.
Đồng thời tiếp tục xử lý
PreviewLostKeyboardFocus
để nắm bắt bất kỳ nguyên nhân thay đổi tiêu điểm nào không phải từ bàn phím hoặc chuột hoặc mã khác của bạn không nhận ra.
cách bắt các sự kiện chuột toàn cục (mức cửa sổ)? Nếu chúng ta có một điều khiển container và tập trung nên ở bên trong trình soạn thảo cho đến khi dữ liệu hợp lệ sẽ được thông qua. –
Để thêm vào câu trả lời của Ray:
UpdateSource được gọi là như vậy:
BindingExpression be = userTextbox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
Ngoài ra, như một sự thay thế, bạn có thể thiết lập các hộp văn bản ràng buộc để:
UpdateSourceTrigger = "PropertyChanged";
Sau đó sẽ gây ra một kiểm tra liên tục, trong khi trước đây sẽ kiểm tra khi cần thiết (performant).
Nếu bạn cố gắng tập trung một phần tử bên trong trình xử lý LostFocus của riêng bạn, bạn sẽ phải đối mặt với StackOverflowException, tôi không chắc chắn về nguyên nhân gốc rễ (tôi nghi ngờ loại tập trung bị trả về) nhưng có một cách giải quyết dễ dàng: .
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
{
var element = (sender as TextBox);
if (!theTextBoxWasValidated())
{
// doing this would cause a StackOverflowException
// element.Focus();
var restoreFocus = (System.Threading.ThreadStart)delegate { element.Focus(); };
Dispatcher.BeginInvoke(restoreFocus);
}
}
Qua Dispatcher.BeginInvoke bạn chắc chắn rằng khôi phục lại sự tập trung không nhận được trong cách của sự mất mát trong sự tiến bộ của tập trung (và tránh những ngoại lệ khó chịu bạn muốn đối mặt khác)
- 1. Thuật toán tốt nhất để tránh mất độ chính xác?
- 2. Cách tốt nhất để tránh maven-jar là gì?
- 3. TextBox - Tôi có thể giữ nguyên vùng chọn khi nó bị mất tiêu điểm không?
- 4. Cách tốt nhất để thực hiện xác thực đầu vào trong C++ bằng cin là gì?
- 5. Cách tốt nhất để thực hiện "hẹn giờ" là gì?
- 6. Cách tốt nhất để thực hiện các hạn chế đầu vào trên một TextBox trong C# là gì?
- 7. cách tốt nhất để có kích thước tệp là gì?
- 8. Cách tốt nhất để gỡ lỗi OpenGL là gì?
- 9. Cách tốt nhất để sử dụng Cookie để xác thực bằng PHP là gì?
- 10. Sự kiện WinForms cho tiêu điểm TextBox?
- 11. Làm cách nào để tránh lỗi này, và cách tốt nhất để song song mã này bằng Python là gì?
- 12. Tín hiệu khi một tiện ích mất tiêu điểm là gì?
- 13. Cách tốt nhất/dễ dàng để xác thực địa chỉ email trong Ruby là gì?
- 14. Cách tốt nhất để hình dung một DataTable khi đang gỡ lỗi là gì?
- 15. Thành phần phi tiêu đề kiểm tra null hoặc thực hành tốt nhất là gì?
- 16. Cách tốt nhất để học Django 1.5 là gì?
- 17. Cách tốt nhất để tránh đi qua một khung dữ liệu xung quanh là gì?
- 18. Cách tốt nhất để xóa gỡ lỗi = "true" khỏi web.config khi xuất bản là gì?
- 19. Cách tốt nhất để cho phép hủy bỏ biểu mẫu phương thức khi xác thực cấp trường là gì?
- 20. Cách tốt nhất để xác thực cho dịch vụ web
- 21. Cách tốt nhất để tăng một điều tra là gì?
- 22. Cách tốt nhất để lưu điểm cao trên iPhone để ngăn chặn tấn công là gì?
- 23. Điểm nhấn của tiêu điểm là gì?
- 24. Sử dụng jQuery để chuyển sang tiêu điểm một tab có lỗi xác thực
- 25. Cách tốt nhất để sử dụng CSS là gì? (KHÔNG * học * nhưng thực sự * sử dụng *)
- 26. Chạy JavaScript khi phần tử mất tiêu điểm
- 27. Cách tốt để gỡ lỗi mã haskell là gì?
- 28. Cách xử lý lỗi SQL Server T-SQL thực tiễn tốt nhất là gì?
- 29. Ẩn bàn phím khi bị mất tiêu điểm khỏi UISearchBar
- 30. Quản lý tệp Xcode. Thực hành tốt nhất là gì?
Bắt lấy nét trong điều khiển có thể dẫn đến trải nghiệm người dùng kém ... Chỉ cần đảm bảo cho phép người dùng thoát khỏi hộp thoại/cửa sổ đó một cách dễ dàng ... –