2012-09-03 33 views

回答

4

你繼承fromn控制,而不是複選框,因此該解決方案是類似於Frigik提出的一個,但它不完全那個。

的所有你必須在你的類定義事件,即:

public event EventHandler CheckedChanged; 

以這種方式使用您的控制可以訂閱每個開發者首先/退訂事件。這還不夠,因爲事件永遠不會被觸發。要做到這一點,你必須定義一個方法來觸發它,並且調用此方法,只要你控制的狀態發生變化:

private void RaiseCheckedChanged() 
{ 
    if (CheckedChanged!= null) 
     CheckedChanged(this, EventArgs.Empty); 
} 

如果這個方法會被稱爲取決於你的控制結構。例如,如果你有一個屬性選中,你可以在其setter中調用該方法:

public bool Checked 
{ 
    get { return _checked; } 
    set 
    { 
     _checked = value; 
     RaiseCheckedChanged(); 
    } 
} 
2

試試這個代碼:

CheckBox chkList1 = new CheckBox(); 
chkList1.CheckedChanged += new EventHandler(CheckBox_CheckedChanged); 

protected void CheckBox_CheckedChanged(object sender, EventArgs e) 
{ 
    // Do your stuff 
} 
+0

謝謝Krunal,但我認爲你不明白我的意思。 我想在我的控件的事件列表中定義「CheckedChanged」事件,當程序員想要在OnCheckedChange中編寫代碼時,他們可以這樣做。 – Mohsen

+0

假設您沒有「CheckedChanged」事件並且您需要它。不幸的是,System.Windows.Forms.Control在事件列表 – Mohsen

+0

中沒有「CheckedChanged」事件您的問題是告訴您在您的'.cs'文件中生成了自定義複選框,並且您希望在您的「.cs」文件中生成複選框「CheckedChanged」 '.cs'文件是否正確?可以把你所嘗試過的? –

2

試試這個:

public class YourCheckBox:CheckBox 
    { 
     public event EventHandler<EventArgs> OnCheckedChangedCustom; 

     protected override void OnCheckedChanged(EventArgs e) 
     { 
      if (OnCheckedChangedCustom!=null) 
      { 
       OnCheckedChangedCustom(this, EventArgs.Empty); 
      } 
      base.OnCheckedChanged(e); 
     } 
    }