0

我创建一个事件并在表单上处理它

用户控制代码:

public event EventHandler ButtonClick;
private void button1_Click(object sender, EventArgs e)
    {
        if (this.ButtonClick != null)
            this.ButtonClick(sender, e);        
    }

表格代码:

private Usercontrol1 sampleUserControl = new Usercontrol1();
public Form1()
    {
        InitializeComponent();
        sampleUserControl.ButtonClick += new EventHandler(this.UserControl_ButtonClick);
    }
private void UserControl_ButtonClick(object sender, EventArgs e)
    {
        //sample event stuff
        this.Close();
        Form2 F2 = new Form2();
        F2.Show();
    }

但事件没有触发。一定是什么问题?

4

3 回答 3

2
 private Usercontrol1 sampleUserControl = new Usercontrol1();

您单击了哪个按钮并不是很明显,但它不会是该用户控件上的按钮。您从未将它添加到表单的 Controls 集合中,因此它是不可见的。使固定:

public Form1()
{
    InitializeComponent();
    this.Controls.Add(sampleUserControl);
    sampleUserControl.BringToFront();
    sampleUserControl.ButtonClick += new EventHandler(this.UserControl_ButtonClick);
}

有可能您现在在表单上有两个这样的用户控件。您之前在表单上放置的一个,可能名称为“Usercontrol11”。还有你在代码中添加的那个。要么使用设计器,要么编写代码,两种方式都会导致这种麻烦。

于 2013-07-07T10:21:24.933 回答
1

我已经获取并编译了您的代码并立即触发了事件,所以我的回答是ButtonClick您在调用的方法中创建和触发的事件是button1_Click isn't因为该方法未连接到由于某种原因单击按钮的事件。

请检查该方法是否已被调用,并且该事件ButtonClick是否已在该方法button1_Click被调用的那一刻注册。如果未调用该方法,则说明您尚未注册该button1_Click方法。否则,您可能已经注册到其他项目

于 2013-07-07T07:58:36.033 回答
0
public Form1()
{
    InitializeComponent();
    this.Usercontrol11.ButtonClickEvent += new EventHandler(UserControl_ButtonClick);
}
private void UserControl_ButtonClick(object sender, EventArgs e)
{
    //sample event stuff
    this.Close();
    Form2 F2 = new Form2();
    F2.Show();
}

Usercontrol1 是用户控件的名称。因此,当我将 usercontrol1 添加到表单时,我给了我名称 Usercontrol11

于 2013-07-07T09:47:41.643 回答