2011-03-03 78 views
0

比方說,我有一個複選框控件:編程觸發事件System.Windows.Forms.Control的

CheckBox cb = new CheckBox(); 
cb.CheckedChanged += delegate(object sender, EventArgs e) 
{ 
    MessageBox.Show("hello"); 
}; 

如何以編程觸發該事件?

我可以做

cb.Checked = !cb.Checked; 
cb.Checked = !cb.Checked; 

但這是醜陋,會觸發兩次......

回答

3

我會重構代碼:

CheckBox cb = new CheckBox(); 
cb.CheckedChanged += delegate(object sender, EventArgs e) 
{ 
    ShowMessageBox(); 
}; 

private void ShowMessageBox() 
{ 
    MessageBox.Show("hello"); 
} 

現在,調用ShowMessageBox,而不是試圖模擬事件。

cb.CheckedChanged += delegate(object sender, EventArgs e) 
{ 
    ShowMessageBox(cb.Checked); 
}; 

private void ShowMessageBox(bool checkedValue) 
{ 
    MessageBox.Show(string.Format("The box was {0}checked", 
     checkedValue ? "" : "un")); 
} 
+0

,如果有一個以上的事件連接到的CheckedChanged:沿着你從事件需要方法的情況下,它需要更多地履行其任務的任何信息,通過?我需要模擬一個真實的事件... – Anders 2011-03-03 21:36:12

+0

@Anders:我不知道有什麼方法可以在「CheckBox」上做到這一點。對於常規按鈕,有['PerformClick'](http://msdn.microsoft.com/en-us/library/system.windows.forms.button.performclick.aspx)方法,但是沒有像' CheckBox'(我知道)。 – 2011-03-03 21:40:01

+1

@Anders:從複選框中派生自己的類並添加一個調用OnCheckChanged()的公共方法。唯一辦法。它很臭,其他代碼將不會計入Checked屬性而不會實際更改,它甚至可能不檢查該值。 – 2011-03-03 22:09:07