如何在userControl中使用委托和事件?

时间:2011-06-28 16:29:57

标签: c# winforms events delegates

我创建了一个userControl名称是UserControl1。在这个usercontrol上,我创建了一个按钮名称是btnAdd。我创建2表单名称是Form1和Form2。然后我在这些表单上添加UserControl1。我想在单击Form1上的btnAdd按钮然后显示字符串“this is form 1”时,如果我单击Form2上的btnAdd按钮,则显示字符串“this is form 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 个答案:

答案 0 :(得分:2)

您的委托/事件相关代码是正确的。 Main方法的问题。

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

您可以在main方法中创建Form1的两个实例。 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);
}