C#for MyControl中的简单事件

时间:2011-02-26 16:26:18

标签: c#

我希望在MyControl中的AllowDrop更改时间创建事件。

在MyControl中:

public event EventHandler AllowDropChanged;

private void MyControl_Load(object sender, EventArgs e)
{
    AllowDropChanged +=new EventHandler(MyControl_AllowDropChanged);
}
private void MyControl_AllowDropChanged(object sender, EventArgs e)
{

        MessageBox.Show("Dropping Changed");

}

我如何举办活动?

4 个答案:

答案 0 :(得分:1)

if (AllowDropChanged != null)
{
    AllowDropChanged(this, new EventArgs());
}

答案 1 :(得分:1)

您不希望在控件的代码中添加事件处理程序。它应该在使用您的控件的代码中处理。所以,你会有这样的东西

AllowDropChanged + = new EventHandler(MyControl_AllowDropChanged);

  public event EventHandler AllowDropChanged;


   private void OnAllowDropChanged()
   {
       if(AllowDropChanged!=null)
       {
           AllowDropChanged(this,new EventArgs());
       }
   }

答案 2 :(得分:1)

你很幸运,AllowDrop是一个虚拟财产。这使得引发事件非常容易,只需覆盖属性并在setter中引发事件。样板代码如下所示:

using System;
using System.Windows.Forms;

class MyControl : Control {

    public event EventHandler AllowDropChanged;

    protected void OnAllowDropChanged(EventArgs e) {
        var handler = AllowDropChanged;
        if (handler != null) handler(this, e);
    }

    public override bool AllowDrop {
        get { return base.AllowDrop; }
        set {
            if (value != base.AllowDrop) {
                base.AllowDrop = value;
                OnAllowDropChanged(EventArgs.Empty);
            }
        }
    }
}

答案 3 :(得分:0)

事件可以像函数一样被调用,但是你应该通常检查它是否为空(它检查是否有任何处理程序绑定到它):

if (AllowDropChanged != null) AllowDropChanged(this, new EventArgs());

您没有在问题中指明事件的内容或来源,因此我无法提供更多信息。只需将该行放在您想要触发事件的任何地方。