C#事件有两种形式的处理 [英] c# event handling between two forms

查看:131
本文介绍了C#事件有两种形式的处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两种形式,我试图捕捉从frmEventReceive.cs frmEventGenerate.cs生成的事件。

在这个例子中,我可以从frmEventGenerate.cs接收该事件,但不知道我怎么能在frmEventReceive.cs抓住这个? frmEventReceive.cs是创造frmEventGenerate.cs我的启动形式。

有人点我在正确的方向,我想我是愚蠢的!

感谢您

frmEventGenerate.cs:

 使用系统;
使用System.Collections.Generic;
使用System.ComponentModel;
使用System.Data这;
使用System.Drawing中;
使用System.Linq的;
使用System.Text;
使用System.Windows.Forms的;

命名活动
{
    公共委托无效LinkToEventHandler();

    公共部分类frmEventGenerate:表
    {
        公共静态事件LinkToEventHandler EVT;

        公共frmEventGenerate()
        {
            的InitializeComponent();
            EVT =新LinkToEventHandler(ReceiveEvent);
            的SendEvent();
        }

        公共静态无效的SendEvent()
        {
            如果(EVT!= NULL)
            {
                EVT();
            }
        }

        公共无效ReceiveEvent()
        {
            的System.Console.WriteLine(接收到的事件 - 这个工程确定);
        }
    }
}
 

frmEventReceive.cs:

 使用系统;
使用System.Collections.Generic;
使用System.ComponentModel;
使用System.Data这;
使用System.Drawing中;
使用System.Linq的;
使用System.Text;
使用System.Windows.Forms的;

命名活动
{
    公共部分类frmEventReceive:表
    {
        公共frmEventReceive()
        {
            的InitializeComponent();
            frmEventGenerate frmGen =新frmEventGenerate();
        }

        公共无效ReceiveEvent()
        {
            的System.Console.WriteLine(我希望能够接收,即使在这里!);
        }

    }
}
 

解决方案

在你的构造函数,实例化 frmEventGenerate 之后:

  frmGen.Evt + = ReceiveEvent;
 

您不必新LinkEventHandler(...)更多 - 为C#2,有一个的方法组转换可用它你可以使用从方法组(一个方法的名称)转换为委托类型。

编辑:我没有看到你的事件是静态的。这表明,其实你应该使用:

  frmEventGenerate.Evt + = ReceiveEvent;
 

...你不需要 frmGen 可变的。

不过,我强烈建议你从这个 - 你为什么希望事件是静态的摆在首位? (我也想呼吁大家更理智命名类型 - 类​​似EventGenerator会更好,在这里,例如忽略约定,类型名称应该是帕斯卡的情况下会导致混乱code。)

I have two forms and I am trying to capture an event generated from frmEventGenerate.cs in frmEventReceive.cs.

In this example I can receive the event from frmEventGenerate.cs but not sure how I can catch this in frmEventReceive.cs? frmEventReceive.cs is my startup form which creates frmEventGenerate.cs.

Can someone point me in the right direction, I think I am being stupid!

Thank you

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!");
        }

    }
}

解决方案

In your constructor, after instantiating frmEventGenerate:

frmGen.Evt += ReceiveEvent;

You don't need new LinkEventHandler(...) any more - as of C# 2, there's a method group conversion available which you can use to convert from a method group (the name of a method) to a delegate type.

EDIT: I hadn't seen that your event was static. That suggests you should actually use:

frmEventGenerate.Evt += ReceiveEvent;

... and you don't need the frmGen variable at all.

However, I would strongly discourage you from this - why do you want the event to be static in the first place? (I'd also urge you to name your types more sensibly - something like "EventGenerator" would be better here, for example. Ignoring the convention that type names should be in Pascal case leads to confusing code.)

这篇关于C#事件有两种形式的处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆