开发者

How to override method and event in WinForm UserControl in C#?

I have a custom control in C# WinForms called BaseControl and there I have a property called Selected.

I want to have an event SelectedChanged and virtual method OnSelecteChanged in the base control and they should behave in the same manner as we have in Control class for many properties i.e. Click event and OnClick method.

Means anyone who derives from my BaseControl can either bind to the event or can override the OnSelectedChanged method.

So, when the value of Selected property is changed event should be fired and if the method is overridden control s开发者_StackOverflow社区hould go to that method.

I know how to fire the event but don't know how to do it for method.

Please guide me...


Below is an example of how events should be implemented:

public class BaseControl : Control
{
    private object _selected;

    public object Selected
    {
        get { return _selected; }
        set
        {
            if (!Equals(_selected, value))
            {
                _selected = value;
                OnSelectedChanged(EventArgs.Empty);
            }
        }
    }

    public event EventHandler SelectedChanged;

    protected virtual void OnSelectedChanged(EventArgs e)
    {
        if (SelectedChanged != null)
            SelectedChanged(this, e);
    }
}

With this example, you can override OnSelectedChanged in an overriden class, like this:

public class MyControl : BaseControl
{
    protected override void OnSelectedChanged(EventArgs e)
    {
        base.OnSelectedChanged(e);

        // My own logic.
    }
}


private bool _selected;

public bool Selected
{
    get { return _selected; }
    set
    {
        if (value != _selected)
        {
            _selected = value;
            OnSelectedChanged();
        }
    }
}

public event EventHandler SelectedChanged;

protected virtual void OnSelectedChanged()
{
    var handler = SelectedChanged;
    if (handler != null)
        handler(this, EventArgs.Empty);
}


Basically you don't fire the event from your Selected property setter - you call the method, and make the method call the event. Anyone overriding the method should call base.OnSelectedChanged to make sure the event still fires. So your method should look something like this:

protected virtual void OnSelectedChanged(EventArgs e) {
    EventHandler handler = Selected; // Or your own delegate variable
    if (handler != null) {
        handler(this, e);
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜