1

System.Windows.Forms.Control から継承したカスタム チェックボックス コントロールがあり、CheckedChanged イベントがありません。ドット ネット ネイティブの CheckBox と同じ CheckedChange を実装したいと考えています。どうすればうまくできますか?

4

3 に答える 3

4

CheckBox ではなく Control から継承しているため、解決策は Frigik によって提案されたものと似ていますが、正確にはそうではありません。

まず、クラスでイベントを定義する必要があります。つまり、次のようになります。

public event EventHandler CheckedChanged;

このようにして、コントロールを使用するすべての開発者は、イベントをサブスクライブ/サブスクライブ解除できます。イベントがトリガーされることはないため、これでは十分ではありません。そのためには、トリガーするメソッドを定義し、コントロールの状態が変化するたびにこのメソッドを呼び出す必要があります。

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

このメソッドが呼び出される場所は、コントロールの構造によって異なります。たとえば、Checked プロパティがある場合、そのセッターでメソッドを呼び出すことができます。

public bool Checked
{
    get { return _checked; }
    set 
    { 
        _checked = value; 
        RaiseCheckedChanged();
    }
}
于 2012-09-03T07:53:32.860 に答える
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);
        }
    }
于 2012-09-03T07:20:16.373 に答える