SelectedIndexChange
事件造成我的麻煩,因爲我在此事件中更改index
,我想避免它。禁用事件自己從其代碼
我手動更改索引時仍需要調用該事件,但不在代碼中。因爲您可能會注意到,當我在事件內部更改索引時,它會再次激發自己。
SelectedIndexChange
事件造成我的麻煩,因爲我在此事件中更改index
,我想避免它。禁用事件自己從其代碼
我手動更改索引時仍需要調用該事件,但不在代碼中。因爲您可能會注意到,當我在事件內部更改索引時,它會再次激發自己。
使用布爾值來指定您在事件中。
private bool _isRunning = false;
private void SelectedIndexChange(...)
{
if(_isRunning) return;
_isRunning = true;
// do your things
_isRunning = false;
}
編輯。正如Scott Chamberlain指出的那樣,如果在事件發生期間有可能發生錯誤,則使用finally
語句來始終重置標誌。
private bool _isRunning = false;
private void SelectedIndexChange(...)
{
if(_isRunning) return;
_isRunning = true;
try
{
// do your things
}
finally
{
_isRunning = false;
}
}
你可能想把它封裝在'try/finally'中,所以如果出現錯誤'_isRunning'被重置。 –
@ScottChamberlain感謝您提供有用的信息。 –
正如意見中提到的Ron可以從事件中刪除處理程序,並做你的工作,然後再指定處理程序事件:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//Remove handler
this.comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;
//Change index here
//Assign handler again
this.comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}
而且羅恩曾建議被實施的其他方式M.Kazem,您也可以使用該選項。
您可能希望將其封裝在'try/finally'中,以便在發生錯誤時重新訂閱事件。 –
@ScottChamberlain把它放在'try/finally'中以保證重新訂閱事件是非常好的主意。 –
您可以暫時取消訂閱該事件,也可以在某處設置一個表示您正在操作的標誌,並在標誌爲true時退出事件。 –