我正在尋找一個簡潔的解決方案,用於臨時取消訂閱WinForm事件。舉例來說,如果我有以下事件處理textBox1的控制:乾淨的解決方案,暫時取消訂閱事件
private void textBox1_TextChanged(object sender, EventArgs eventArgs)
{
// Do something
}
我不希望這個事件,火災,當我以編程方式更改文本框的內容。但不是寫:
try
{
textBox1.TextChanged -= textBox1_TextChanged;
// Change textbox contents without triggering event
}
finally
{
textBox1.TextChanged += textBox1_TextChanged;
}
我要找的東西,我可以使用類似於此:
using(new EventInhibitor(textBox1.TextChanged, textBox1_TextChanged))
{
// Change textbox contents without triggering event
}
問題是我怎麼能textBox1.TextChanged事件傳遞給構造函數?反射?表達式?
public class EventInhibitor : IDisposable
{
private bool _disposed = false;
private XXX _event;
private EventHandler _handler;
public EventInhibitor(XXX event, EventHandler handler)
{
_event = event;
_handler = handler;
_event -= _handler;
}
public void Dispose()
{
if(_disposed)
return:
_event += _handler;
_event = null;
_handler = null;
_disposed = true;
}
}
這是一個奇怪的問題。您希望在設置Text屬性的行上發生什麼樣的異常?如果在賦值的右邊有很多東西,那麼在設置Text屬性之前應該先處理它,然後在try..catch中進行處理,然後您不必重新建立事件處理程序。 –
http://stackoverflow.com/questions/744494/winforms-temporarily-disable-an-event-handler –
'textBox1.TextChanged - = textBox1_TextChanged;'**不會拋出異常**。 –