Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从c#winforms中的其他类侦听类中的事件处理程序?_C#_Winforms - Fatal编程技术网

如何从c#winforms中的其他类侦听类中的事件处理程序?

如何从c#winforms中的其他类侦听类中的事件处理程序?,c#,winforms,C#,Winforms,我有两个类,我在一个类中初始化事件处理程序。我需要从另一个类中监听这个事件处理程序。我可以用哪种方式实现这一点 我已经试过了 public event EventHandler NetworkLostEvent; 我使用此代码触发事件 NetworkLostEvent(this, EventArgs.Empty); 如何从其他类收听此事件?您需要订阅此事件 可以使用以下行订阅事件 //Lets say you have event defined in class2 or form2 for

我有两个类,我在一个类中初始化事件处理程序。我需要从另一个类中监听这个事件处理程序。我可以用哪种方式实现这一点

我已经试过了

public event EventHandler NetworkLostEvent;
我使用此代码触发事件

NetworkLostEvent(this, EventArgs.Empty);

如何从其他类收听此事件?

您需要订阅此事件

可以使用以下行订阅事件

//Lets say you have event defined in class2 or form2
form2.NetworkLostEvent += NetworkLostEventTriggered;

private void NetworkLostEventTriggered(object sender, EventArgs e)
{
    //logic
}
或者


如果我理解正确,您需要的是一个全局事件,例如:1 datagridview更改了单元格值,自动更改所述datagridview的任何其他类似实例的单元格值,是否正确

如果是这种情况,下面是我如何处理同时调用多个实例的事件()

在网上搜索解决方案后,我找到了一个非常适合我的解决方案。这是一个“特殊”事件,您可以自己创建并随意开火:

public class SpecialEvents
{
    //first custom event
    public EventArgs e = null;
    public event StartEventHandlerA StartedEventA;
    public delegate void StartEventHandlerA(SpecialEvents se, EventArgs e);
    public void StartEventA()
    {
        if (StartedEventA != null)
        {
            StartedEventA(this, e);
        }
    }

    //second custom event
    public event StartEventHandlerB StartedEventB;
    public delegate void StartEventHandlerB(SpecialEvents se, EventArgs e);
    public void StartEventB()
    {
        if (StartedEventB != null)
        {
            StartedEventB(this, e);
        }
    }

}
现在我们需要订阅上述定制活动:

SpecialEvents special_Events = new SpecialEvents();
special_Events.StartedEventA += special_Events_StartedEventA;
现在是触发该事件时要执行的代码:

void special_Events_StartedEventA(SpecialEvents se, EventArgs e)
{
   //do whatever you want for this specific class/object once that event is fired
}
最后,您可以随时随地触发事件:

special_Events.StartEventA();
这将做的很简单,任何与该事件相关联的依赖/独立代码都应该在特定时间触发,无论哪个对象触发该事件,都会为所有对象触发该事件,并且每个对象或类都将执行其自己的脚本或代码


这样一来,你不仅可以完成你想要的监听功能,还可以同时完成大量的工作。

yourClass.NetworkLostEvent+=(sender,args)=>{//your code}
你为什么还没有选择Answare?对我的方法或某人的方法有任何疑问吗?如果没有一件适合,请说明,以便我们能进一步帮助您。
special_Events.StartEventA();