如何在C#中使用现有的事件?

时间:2011-12-29 06:36:53

标签: c# events delegates

我正在处理一个关于委托和事件的问题。我是这方面的新手。我不知道怎么称呼这个事件。

有人会告诉我吗? 提前谢谢。

5 个答案:

答案 0 :(得分:1)

可以在声明它的类中调用该事件。首先,您通常要检查您的事件是否为空。

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

您传递给事件的参数将取决于事件的声明。为了给你一点背景,一个事件只是一个编译技巧。当事件如

public event ChangedEventHandler Changed;

编译它看起来像

protected ChangedEventHandler _change;
public ChangedEventHandler Change
{
    add { _change += value; }
    remove { _change -= value; }
}

所以声明它的地方都会使用_change,而外面的任何内容都会使用Change。换句话说,在声明它的地方,它只是一个委托,所有正常的规则都适用。

答案 1 :(得分:1)

以下是调用事件的简单示例....

// event_keyword.cs
using System;
public delegate void MyDelegate();   // delegate declaration

public interface I 
{
   event MyDelegate MyEvent;
   void FireAway();
}

public class MyClass: I 
{
   public event MyDelegate MyEvent;

   public void FireAway() 
   {
      if (MyEvent != null)
         MyEvent();
   }
}

public class MainClass 
{
   static private void f() 
   {
      Console.WriteLine("This is called when the event fires.");
   }

   static public void Main () 
   {
      I i = new MyClass();

      i.MyEvent += new MyDelegate(f);
      i.FireAway();
   }
}

Link可能有帮助。

答案 2 :(得分:0)

要重复使用该事件,您只需将事件附加到您的控件,例如。

buttonone.Click+= event1;
buttonTwo.Click+= event1;

有关详细信息,请查看:C# Event Implementation Fundamentals, Best Practices and Conventions

答案 3 :(得分:0)

定义委托后,您需要定义何时调用该事件。我的意思是你可以在为特定变量分配任何值时调用事件。

这是定义具有相同变量类的委托的示例。

public class callbackdel : EventArgs
{
    public readonly string resp = null;

    public callbackdel(string s)
    {
        resp = s;
    }
}    

public delegate void WorkerEndHandler(object o, callbackdel e);

现在在您正在使用的控件中,您需要添加此方法。

public void OnWorkEnd(object o, callbackdel e)
{
        WorkEnd(o, e);
}

创建方法并定义委托后,只需调用方法即可从任何委托中触发事件。

OnWorkEnd((object)this, e);

答案 4 :(得分:0)

使用活动时,您首先必须声明:

// Create some custom arguments for the event
public class SampleEventArgs
{
    public SampleEventArgs(string s) 
    { 
        Text = s; 
    }
    public String Text {get; private set;} 
}

// Define a class that uses the event
public class EventPublisher
{
    // Declare the delegate 
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event by using the () operator.
        if (SampleEvent != null)
            SampleEvent(this, new SampleEventArgs("Hello"));
    }
}

然后您可以订阅该活动:

 EventPublisher publisher = new EventPublisher();
            publisher.SampleEvent += new EventPublisher.SampleEventHandler(SampleEventHandler);

public void SampleEventHandler(object sender, SampleEventArgs args)
        {

        }

EventPublisher执行RaiseSampleEvent()

时,系统会调用您的事件处理程序