如何在C#中使用已存在的事件?

如何在C#中使用已存在的事件?,c#,events,delegates,C#,Events,Delegates,我正在处理一个关于代表和事件的问题。我是这方面的新手。我不知道该怎么称呼这个活动 有人会告诉我吗? 提前感谢。要恢复事件,您只需将事件附加到控件中即可 buttonone.Click+= event1; buttonTwo.Click+= event1; 在查看更多详细信息之前:可以在声明事件的类中调用该事件。首先,您通常需要检查事件是否为null if (MyEvent != null) MyEvent(this, new EventArgs()); 传递给事件的参数将取决于事件的声明。为

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

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

要恢复事件,您只需将事件附加到控件中即可

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

在查看更多详细信息之前:

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

if (MyEvent != null) MyEvent(this, new EventArgs());
传递给事件的参数将取决于事件的声明。为了让您了解更多的背景知识,事件只是一个编译器技巧。当事件发生时,例如

public event ChangedEventHandler Changed;
它看起来像

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

因此,声明内部的任何内容都将使用
\u change
,而外部的任何内容都将使用
change
。换句话说,在声明它的内部,它只是一个委托,所有正常规则都适用。

这里是调用事件的简单示例

// 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();
   }
}

有一些可能会有所帮助。

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

下面是使用相同变量类定义委托的示例

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);

使用事件时,首先必须声明它:

// 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()

时,将调用事件处理程序。请提供更多信息。您是否正在尝试引发现有事件?您正在尝试分配事件处理程序吗?如果可以,请用代码示例进行说明。您所说的是什么类型/类型的事件?你能解释问题域吗?如果你得到了想要的信息,别忘了将答案标记为已接受。谢谢你的样本vikky。这对我很有帮助。事件由包含该事件的类调用。谢谢你提供的信息。祝您有个美好的一天。