Form nottrol中的Usercontrol句柄

时间:2013-07-07 07:48:04

标签: c# winforms user-controls event-handling

我创建了一个事件并在Form

上处理它

用户控制代码:

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();
    }

但事件没有解雇。一定是什么问题?

3 个答案:

答案 0 :(得分:2)

 private Usercontrol1 sampleUserControl = new Usercontrol1();

您点击的确切按钮并不是非常明显,但不会成为该用户控件上的按钮。您从未将其添加到窗体的Controls集合中,因此它不可见。修正:

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

在某些情况下,您现在在表单上有两个这些用户控件。您之前在表单上删除的一个,可能名为“Usercontrol11”。你在代码中添加的那个。无论是使用设计师还是编写代码,两种方式都会造成这种麻烦。

答案 1 :(得分:1)

我已经接受了您的代码并对其进行了编译,并且事件直接触发了,所以我的答案是您在ButtonClick方法中创建并触发的button1_Click isn't事件,因为该方法被调用由于某种原因没有点击按钮的事件。

请检查方法是否已被调用,并且在调用方法ButtonClick时已注册事件button1_Click。如果未调用该方法,则表示您尚未注册button1_Click方法。否则,您可能已经注册了其他项目

答案 2 :(得分: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是usercontrol的名称。因此,当我将usercontrol1添加到表单时,我给出了名称Usercontrol11