表单中的Usercontrol句柄未激发

本文关键字:句柄 Usercontrol 表单 | 更新日期: 2023-09-27 18:21:34

我创建一个事件并在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();
    }

但是该事件不触发。一定是什么问题?

表单中的Usercontrol句柄未激发

 private Usercontrol1 sampleUserControl = new Usercontrol1();

您单击的按钮并不十分明显,但它不会是该用户控件上的按钮。您从未将它添加到窗体的Controls集合中,因此它不可见。修复:

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

有一些可能性,你现在在表单上有两个这样的用户控件。一个是你以前放在表单上的,可能名为"Usercontrol11"。还有你在代码中添加的那个。要么使用设计器,要么编写代码,这两种方法都会导致这种麻烦。

我已经获取了您的代码并对其进行了编译,事件立即启动,所以我的答案是,您在方法button1_Click isn't中创建并启动的ButtonClick事件被调用,因为该方法由于某种原因没有连接到单击按钮的事件。

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

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