Làm cách nào để tắt trình xử lý sự kiện tạm thời trong WinForms?WinForms: tạm thời tắt trình xử lý sự kiện
Trả lời
Có lẽ, cách đơn giản nhất (mà không cần hủy đăng ký hoặc các công cụ khác) là để khai báo một giá trị boolean và kiểm tra xem nó vào đầu xử lý:
bool dontRunHandler;
void Handler(object sender, EventArgs e) {
if (dontRunHandler) return;
// handler body...
}
Điều này rất đơn giản, nhưng mã sẽ là một mớ hỗn độn nếu bạn sử dụng thường xuyên. – maamaa
Disable từ những gì quan điểm? Nếu bạn muốn loại bỏ một phương pháp đó là trong phạm vi của bạn từ danh sách các đại biểu về xử lý, bạn chỉ có thể làm ..
object.Event -= new EventHandlerType(your_Method);
này sẽ loại bỏ phương pháp đó từ danh sách các đại biểu, và bạn có thể lắp lại nó sau này với
object.Event += new EventHandlerType(your_Method);
Tôi nghĩ bạn có nghĩa là your_Method thay vì your_Method(). Kể từ C# 2.0, bạn cũng không cần phần "EventHandlerType" mới - chỉ là object.Event + = yourMethod; và object.Event - = yourMethod; –
Vâng, ý tôi là nó sẽ không còn nữa;). Đã không nhận thức được việc xây dựng đại biểu ngầm, mặc dù; đó là điều tốt để biết. –
Ý tưởng này phù hợp với tôi (so với câu trả lời được chấp nhận) trong trường hợp tôi cần tạm thời tắt Trình xử lý đối với hộp tổ hợp EditValueChanged. – PhoenixDev
Tôi đang làm theo cách này, sử dụng tiện ích kiểm soát.
public static void SetDatasource(
this ComboBox cb,
object dataSource,
EventHandler _SelectedIndexChanged_eventHandler = null,
EventHandler _SelectedValueChanged_eventHandler = null)
{
//disable events
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged -= _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged -= _SelectedValueChanged_eventHandler;
if (cb.InvokeRequired)
{
cb.BeginInvoke(new _d_SetDatasource_ComboBox(SetDatasource), new object[] { cb, dataSource, _SelectedIndexChanged_eventHandler});
}
else
{
cb.DataSource = dataSource;
//events enabled again
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged += _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged += _SelectedValueChanged_eventHandler;
}
}
private delegate void _d_SetDatasource_ComboBox(ComboBox cb, object dataSource, EventHandler _SelectedIndexChanged_eventHandler = null, EventHandler _SelectedValueChanged_eventHandler = null);
- 1. jquery tạm thời unbinding sự kiện
- 2. xử lý nhiều tệp tạm thời nhỏ
- 3. jQuery - Làm cách nào để tạm thời vô hiệu hóa trình xử lý sự kiện onclick sau khi sự kiện đã được kích hoạt?
- 4. Sự khác biệt giữa Trình xử lý sự kiện & Trình xử lý sự kiện trong Java là gì?
- 5. Sự khác biệt, nếu có, giữa trình xử lý sự kiện và trình xử lý sự kiện?
- 6. Xử lý với luồng tệp tạm thời
- 7. Xử lý sự kiện thoát khỏi WPF
- 8. VB.NET 2005 - Trình xử lý sự kiện "Toàn cầu"?
- 9. Trong trình thiết kế winforms, tôi có thể tắt cú nhấp đúp -> mã đằng sau việc tạo trình xử lý sự kiện không?
- 10. Làm cách nào để tắt trình xử lý sự kiện nhấp chuột cho thời gian cụ thể?
- 11. Xác định danh sách các trình xử lý sự kiện được liên kết với sự kiện
- 12. Cách xử lý sự kiện thời gian trên iOS?
- 13. Trình xử lý sự kiện Javascript cho in
- 14. jQuery nhiều trình xử lý sự kiện - Cách hủy?
- 15. android.widget.Switch - bật/tắt trình nghe sự kiện?
- 16. Thêm xử lý sự kiện riêng trước xử lý sự kiện khác
- 17. Xử lý sự kiện nền công nhân
- 18. C# Gỡ bỏ rõ ràng Trình xử lý sự kiện
- 19. Tạo trình xử lý sự kiện C# trống
- 20. Chuyển hướng Symfony2 cho trình xử lý sự kiện?
- 21. Trình xử lý sự kiện nhấn nút dài
- 22. Google Maps v3 InfoBox Thêm Trình xử lý Sự kiện
- 23. Trình xử lý sự kiện không được gọi? - wxWidgets
- 24. Delphi VCL cho Win32 - nhiều trình xử lý sự kiện
- 25. Thêm trình xử lý sự kiện nhấp vào iframe
- 26. Làm mới trình xử lý sự kiện Javascript
- 27. Thêm trình xử lý sự kiện nhấp chuột vào Pushpin
- 28. Tôi có nên xóa trình xử lý sự kiện không?
- 29. Trình xử lý sự kiện của UserControl không kích hoạt
- 30. Trình xử lý sự kiện lưu trữ HTML5/JS
Bạn có thể chia sẻ những gì bạn đang làm ở cấp cao hơn không? Bởi vì bạn có thể không muốn vô hiệu hóa _ALL_ trình xử lý sự kiện (hình vẽ mặc định và các trình xử lý di chuyển của bạn). –
Tôi chỉ không muốn nắm bắt những thay đổi trong tình trạng kiểm soát khi cập nhật nó theo chương trình. Và có, tôi không muốn vô hiệu hóa các trình xử lý sự kiện _ALL_, chỉ là "một trình xử lý sự kiện". http://stackoverflow.com/questions/744436/winforms-two-way-textbox-problem – George