社区首页 >问答首页 >如何在C#中重写WinForm UserControl中的方法和事件?问如何在C#中重写WinForm UserControl中的方法和事件?ENStack Overflow用户提问于 2010-11-16 21:47:34回答 3查看 7.5K关注 0票数 4我在C# WinForms中有一个名为BaseControl的自定义控件,还有一个名为Selected的属性。
我希望在基控件中有一个事件SelectedChanged和虚拟方法OnSelecteChanged,对于许多属性,即Click事件和OnClick方法,它们的行为方式应该与我们在Control类中的方式相同。
这意味着从我的BaseControl派生的任何人都可以绑定到该事件,也可以重写OnSelectedChanged方法。
因此,当Selected属性值发生变化时,应该触发事件,如果方法被重写,则控制应该转到该方法。
我知道如何触发事件,但不知道如何使用方法。
请指引我。
c#关注问题分享EN回答 3推荐最新Stack Overflow用户回答已采纳发布于 2010-11-16 21:55:23
下面是应该如何实现事件的示例:
代码语言:javascript复制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);
}
}在此示例中,您可以在被覆盖的类中覆盖OnSelectedChanged,如下所示:
代码语言:javascript复制public class MyControl : BaseControl
{
protected override void OnSelectedChanged(EventArgs e)
{
base.OnSelectedChanged(e);
// My own logic.
}
}收藏分享票数 3ENStack Overflow用户发布于 2010-11-16 21:55:42
代码语言:javascript复制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);
}收藏分享票数 1ENStack Overflow用户发布于 2010-11-16 21:52:58
基本上,您不会从Selected属性设置器中触发事件-而是调用方法,然后让方法调用事件。任何重写该方法的人都应该调用base.OnSelectedChanged,以确保事件仍然会触发。因此,您的方法应该如下所示:
代码语言:javascript复制protected virtual void OnSelectedChanged(EventArgs e) {
EventHandler handler = Selected; // Or your own delegate variable
if (handler != null) {
handler(this, e);
}
}收藏分享票数 0EN页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持原文链接:https://stackoverflow.com/questions/4194782
复制相关文章