使用按钮动态创建表单并在单击按钮时关闭此表单

时间:2013-08-21 10:57:09

标签: c# winforms

form1上,我registerButton创建了新的registerForm,其中包含acceptButton。两者都是动态创建的:

private void registerButton_Click(object sender, EventArgs e)
{
    registerButton.Enabled = false;
    Form registrationForm = new Form();
    registrationForm.Text = "Register new account";
    registrationForm.Visible = true;
    Button createButton = new Button();
    createButton.Text = "Accept";
    registrationForm.Controls.Add(createButton);
    createButton.Click+= new EventHandler(createButton_Click);        
}

点击registerForm而不关闭acceptButton后如何关闭form1

3 个答案:

答案 0 :(得分:3)

您已丢失对注册表单实例的引用。但是,您始终可以从传递给Click事件处理程序的 sender 参数中获取它。像这样:

    private void registrationButton_Click(object sender, EventArgs e) {
        var btn = (Control)sender;
        btn.FindForm().Close();
    }

答案 1 :(得分:2)

对于您的代码(我不建议使用),修复将是

createButton.Click += (s,e) => registrationForm.Close();

当您将此lambda作为事件处理程序附加时,您有机会在闭包中捕获registrationForm实例。因此,当点击事件发生时,表单实例将可用,您将能够关闭此表单。


更好的方法:不是动态地向窗体添加按钮,而是将此按钮静态放置在设计器中并附加将关闭窗体的click事件处理程序:

private void acceptButton_Click(object sender, EventArgs e)
{
    Close();
}    

使用注册表格很简单:

private void registerButton_Click(object sender, EventArgs e)
{
    Form registrationForm = new Form();
    registrationForm.Show();
}

答案 2 :(得分:1)

this.Close()的点击事件中添加acceptButton。 您可以动态地附加事件。在创建按钮时,执行acceptButton.Click += new System.EventHandler(accepButton_click);并创建匹配功能或在执行+ =。

后按Tab键两次