c # обработка событий между двумя формами - PullRequest
4 голосов
/ 03 февраля 2010

У меня есть две формы, и я пытаюсь захватить событие, сгенерированное из 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!");
        }

    }
}

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

В вашем конструкторе, после создания экземпляра frmEventGenerate:

frmGen.Evt += ReceiveEvent;

Вам больше не нужно new LinkEventHandler(...) - начиная с C # 2, доступно преобразование группы методов , которое вы можете использовать для преобразования из группы методов (имя метода) в тип делегата.

РЕДАКТИРОВАТЬ: я не видел, что ваше событие было статичным. Это говорит о том, что вы должны использовать:

frmEventGenerate.Evt += ReceiveEvent;

... и вам не нужна переменная frmGen.

Однако я бы сильно отговорил вас от этого - почему вы хотите, чтобы событие было статичным в первую очередь? (Я также призываю вас называть ваши типы более разумно - например, здесь будет лучше что-то вроде «EventGenerator». Игнорирование соглашения о том, что имена типов должны быть в случае Pascal, приводит к путанице в коде.)

0 голосов
/ 16 сентября 2011
//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();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...