0

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

4

3 回答 3

3

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

    private void registrationButton_Click(object sender, EventArgs e) {
        var btn = (Control)sender;
        btn.FindForm().Close();
    }
于 2013-08-21T11:31:14.890 回答
2

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

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

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


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

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

注册表的使用将很简单:

private void registerButton_Click(object sender, EventArgs e)
{
    Form registrationForm = new Form();
    registrationForm.Show();
}
于 2013-08-21T11:08:17.373 回答
1

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

于 2013-08-21T11:09:27.813 回答