如何在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。这对我很有帮助。事件由包含该事件的类调用。谢谢你提供的信息。祝您有个美好的一天。