Как использовать делегат и событие в userControl? - PullRequest
2 голосов
/ 28 июня 2011

Я создал имя userControl UserControl1. На этом пользовательском контроле я создаю кнопку с именем btnAdd. Я создаю 2 имени формы - Form1 и Form2. И затем я добавляю UserControl1 в эту форму. Я хочу, чтобы когда я нажимал кнопку btnAdd в Form1, затем отображал строку «это форма 1», если я нажимал кнопку btnAdd в Form2, то отображал строку «это форма 2».

Я хочу использовать делегат и событие для этого. Не могли бы вы помочь мне. Большое спасибо.

Мой код следующий, но не запускается. истинный результат должен отображаться в окне сообщения «успешно добавлено»:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace EventDelegateUserControl
{

    public partial class UC_them : UserControl
    {
        public UC_them()
        {
            InitializeComponent();
        }
        public delegate void ThemClickHandler(object sender, EventArgs e);
        public event ThemClickHandler ThemClick;

        public void OnThemClick(EventArgs e)
        {
            if (ThemClick != null)
            {
                ThemClick(this,e);
            }
        }
        public void add()
        {
            OnThemClick(EventArgs.Empty);
        }
        public void btnThem_Click(object sender, EventArgs e)
        {
            add();
        }
    }

//---------------------------

    public partial class Form1 : Form
    {

        public UC_them uc_them =new UC_them();
        public Form1()
        {
            InitializeComponent();
        }

        public void dangky(UC_them uc_them)
        {
            uc_them.ThemClick += new UC_them.ThemClickHandler(uc_them_ThemClick);    
        }

        void uc_them_ThemClick(object sender, EventArgs e)
        {
            MessageBox.Show("Add successful");
        }
    }

//----------------------------

static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            UC_them them = new UC_them();
            Form1 form1 = new Form1();
            form1.dangky(them);
        }
    }

}

1 Ответ

2 голосов
/ 29 июня 2011

Ваш код участника / события корректен. Проблема с методом Main.

Application.Run(new Form1());
UC_them them = new UC_them();
Form1 form1 = new Form1();
form1.dangky(them);

Вы создаете два экземпляра Form1 в методе main. Один экземпляр в методе Application.Run (первый экземпляр) и после этого создайте другой экземпляр. Вы устанавливаете привязку события только для второго экземпляра. Но на самом деле работает только первый экземпляр.

Если вы измените основной метод, как показано ниже, он должен работать.

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);     

    UC_them them = new UC_them();
    Form1 form1 = new Form1();
    form1.dangky(them);

    Application.Run(form1);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...