Csharp/C#教程:c#两种forms之间的事件处理分享


c#两种forms之间的事件处理

我有两种forms,我试图捕获frmEventReceive.cs中frmEventGenerate.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案例的约定会导致令人困惑的代码。)

上述就是C#学习教程:c#两种forms之间的事件处理分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 //Receiver using System; using System.Windows.Forms; namespace eTest { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } public void ReceiveEvent(int i) { MessageBox.Show("Event Received from Form: " + i.ToString()); } private void btnNew_Click(object sender, EventArgs e) { int num = 0; int x = 0; num = Convert.ToInt32(txtForms.Text); for (x = 0; x < num; x++) { frmDL f = new frmDL(); f.Evt += ReceiveEvent; f.iID = x; f.Text = x.ToString(); f.Show(); f.Activate(); Application.DoEvents(); } } } } //Sender using System; using System.Windows.Forms; namespace eTest { public delegate void myEventHandler(int i); public partial class frmDL : Form { public event myEventHandler Evt; public int iID = 0; public frmDL() { InitializeComponent(); } public void SendEvent() { if (Evt != null) { Evt(this.iID); } } private void btnEvent_Click(object sender, EventArgs e) { SendEvent(); } } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1045284.html

(0)
上一篇 2022年2月5日
下一篇 2022年2月5日

精彩推荐