自定义事件初始化问题
问题描述:
我用我的图形对象自定义事件通知的对象的变化:自定义事件初始化问题
public class OnLabelWidthChangedEventArgs : EventArgs
{
private float _width;
public float Width
{
get { return _width; }
set { _width = value; }
}
public OnLabelWidthChangedEventArgs(float widthParam) : base()
{
Width = widthParam;
}
}
这是激发此事件的对象:
public class DisplayLabel : DisplayTextObject
{
public event EventHandler<OnLabelWidthChangedEventArgs > OnLabelSizeChanged;
public DisplayLabel(ScreenView _screenParam, IXapGraphicObject obj) : base(_screenParam, obj)
{
l = new Label();
SetSize();
}
public override void SetSize()
{
Width = w;
Height = h;
if(OnLabelWidthChanged != null)
OnLabelSizeChanged.Invoke(this, new OnLabelWidthChangedEventArgs(w)); // OnLabelSizeChanged is null
}
的OnLabelSizeChanged
总是空,怎么我可以初始化它吗?
我有一个代表,而不是自定义事件的工作解决方案:
public event OnWidthChanged WidthChanged = delegate { };
,但我想知道如何解决这个问题,使用自定义事件。
谢谢你的帮助。
答
你不初始化事件,你处理函数分配给它(又名订阅它。),类似这样:
myDisplayLabel.OnLabelWidthChanged += MyEventHandlerMethod;
其中MyEventHandlerMethod
是匹配事件的签名的方法,即
void MyEventHandlerMethod(Object sender, OnLabelWidthChangedEventArgs)
睡前阅读:https://msdn.microsoft.com/en-us/library/9aackb16(v=vs.110).aspx
+0
好的,错过了...委托语法更紧凑...我想我会使用它。 – Alexus
你工作的解决方案也是一个自定义事件。 – Servy
查看https://www.google.com.br/search?q=C%23+custom+events – Tony