我有两个表单,我试图捕获从 frmEventGenerate.cs 中的 frmEventReceive.cs 生成的事件。
在此示例中,我可以从 frmEventGenerate.cs 接收事件,但不确定如何在 frmEventReceive.cs 中捕获该事件? frmEventReceive.cs 是我的启动表单,它创建 frmEventGenerate.cs。
有人能指出我正确的方向吗,我认为我很愚蠢!
谢谢
frmEventGenerate.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Events
{
public delegate void LinkToEventHandler();
public partial class frmEventGenerate : Form
{
public static event LinkToEventHandler Evt;
public frmEventGenerate()
{
InitializeComponent();
Evt += new LinkToEventHandler(ReceiveEvent);
SendEvent();
}
public static void SendEvent()
{
if (Evt != null)
{
Evt();
}
}
public void ReceiveEvent()
{
System.Console.WriteLine("Received Event - This works ok");
}
}
}
frmEventReceive.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Events
{
public partial class frmEventReceive : Form
{
public frmEventReceive()
{
InitializeComponent();
frmEventGenerate frmGen = new frmEventGenerate();
}
public void ReceiveEvent()
{
System.Console.WriteLine("I want to be able to receive the even here!");
}
}
}
在你的构造函数中,实例化之后frmEventGenerate
:
frmGen.Evt += ReceiveEvent;
你不需要new LinkEventHandler(...)
不再 - 从 C# 2 开始,有一个方法组转换可用,您可以使用它从方法组(方法的名称)转换为委托类型。
编辑:我没有看到你的事件是静态的。这表明您实际上应该使用:
frmEventGenerate.Evt += ReceiveEvent;
...而且你不需要frmGen
根本没有变量。
但是,我强烈建议您不要这样做 - 为什么您首先希望事件是静态的? (我还敦促您更明智地命名您的类型 - 例如,像“EventGenerator”这样的名称会更好。忽略类型名称应采用 Pascal 大小写的约定会导致代码混乱。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)