有沒有辦法將這些空隙合并為一個?我有很多使用相同事件的控制元件,并且在執行期間被激活和停用
private void activate()
{
tb1.TextChanged = eventFil;
tb2.TextChanged = eventFil;
cb1.CheckStateChanged = eventFil;
cb2.CheckStateChanged = eventFil;
}
private void deactivate()
{
tb1.TextChanged -= eventFil;
tb2.TextChanged -= eventFil;
cb1.CheckStateChanged -= eventFil;
cb2.CheckStateChanged -= eventFil;
}
像這樣
private void activate(operator aux)
{
tb1.TextChanged aux eventFil;
tb2.TextChanged aux eventFil;
cb1.CheckStateChanged aux eventFil;
cb2.CheckStateChanged aux eventFil;
}
或者像這樣
private void activate()
{
aux(c => c = eventFiltre);
}
private void deactivate()
{
aux(c => c -= eventFiltre);
}
private void aux(Action<EventHandler> action)
{
action(tb1.TextChanged);
....
}
uj5u.com熱心網友回復:
解決潛在問題的替代方案,而不是手頭的問題:引入 Handler-Switch。
最容易用代碼解釋:
class YourClass
{
private bool CanHandleTextChanged = true;
// It has probably specialized EventArgs, but you get the gist ...
// This would be "eventFil" in your example
private void TextChangedHandler ( object sender, EventArgs e )
{
if (!CanHandleTextChanged) return;
// ... handle TextChanged Event
}
}
CanHandleTextChanged然后,您可以通過簡單地將 bool 欄位設定為 true 或 false來激活或停用事件處理。
uj5u.com熱心網友回復:
我認為這是不可能的,因為 = 和 -= 只能出現在分配中。您可以通過一種方法獲得更好的維護,但每個事件使用兩句話:
private void EnableEvents(bool enabled = true)
{
if (enabled)
{
tb1.TextChanged = eventFil;
tb2.TextChanged = eventFil;
cb1.CheckStateChanged = eventFil;
cb2.CheckStateChanged = eventFil;
}
else
{
tb1.TextChanged -= eventFil;
tb2.TextChanged -= eventFil;
cb1.CheckStateChanged -= eventFil;
cb2.CheckStateChanged -= eventFil;
}
}
uj5u.com熱心網友回復:
您可以使用這樣的一種方法
//you can pass true or false
private void Operate(bool isActivation)
{
if(isActivation)
{
tb1.TextChanged = eventFil;
tb2.TextChanged = eventFil;
cb1.CheckStateChanged = eventFil;
cb2.CheckStateChanged = eventFil;
}
else
{
tb1.TextChanged -= eventFil;
tb2.TextChanged -= eventFil;
cb1.CheckStateChanged -= eventFil;
cb2.CheckStateChanged -= eventFil;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/450346.html
