2017-02-24 140 views
-2

我用我的图形对象自定义事件通知的对象的变化:自定义事件初始化问题

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 { }; 

,但我想知道如何解决这个问题,使用自定义事件。

谢谢你的帮助。

+2

你工作的解决方案也是一个自定义事件。 – Servy

+2

查看https://www.google.com.br/search?q=C%23+custom+events – Tony

回答

1

你不初始化事件,你处理函数分配给它(又名订阅它。),类似这样:

myDisplayLabel.OnLabelWidthChanged += MyEventHandlerMethod; 

其中MyEventHandlerMethod是匹配事件的签名的方法,即

void MyEventHandlerMethod(Object sender, OnLabelWidthChangedEventArgs) 

睡前阅读:https://msdn.microsoft.com/en-us/library/9aackb16(v=vs.110).aspx

+0

好的,错过了...委托语法更紧凑...我想我会使用它。 – Alexus