![](/img/trans.png)
[英]how to create event columnwidthchanging in usercontrol winform C#?
[英]How to override method and event in WinForm UserControl in C#?
我在C#WinForms中有一個名為BaseControl
,我有一個名為Selected
的屬性。
我希望在基本控件中有一個事件SelectedChanged
和虛方法OnSelecteChanged
,它們的行為應該與我們在Control
類中對許多屬性的行為相同,即Click
事件和OnClick
方法。
意味着從我的BaseControl
派生的任何人都可以綁定到事件或者可以覆蓋OnSelectedChanged
方法。
因此,當Selected
屬性的值被更改時,應該觸發事件,如果方法被覆蓋,則控制應該轉到該方法。
我知道如何解雇事件但不知道如何為方法做這件事。
請指導我......
以下是如何實施事件的示例:
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
,如下所示:
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);
}
基本上,您不會從Selected
屬性設置器中觸發事件 - 您調用該方法,並使該方法調用該事件。 任何覆蓋該方法的人都應調用base.OnSelectedChanged
以確保該事件仍然觸發。 所以你的方法應該是這樣的:
protected virtual void OnSelectedChanged(EventArgs e) {
EventHandler handler = Selected; // Or your own delegate variable
if (handler != null) {
handler(this, e);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.