使用按钮动态创建表单,并在单击按钮时关闭此表单
本文关键字:按钮 表单 单击 动态 创建 | 更新日期: 2023-09-27 18:28:38
在form1
上,我有registerButton
,它创建了带有acceptButton
的新registerForm
。两者都是动态创建的:
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);
}
单击acceptButton
后如何关闭registerForm
而不关闭form1
?
您丢失了对注册表单实例的引用。但是,您总是可以从传递给Click事件处理程序的sender参数中获取它。像这样:
private void registrationButton_Click(object sender, EventArgs e) {
var btn = (Control)sender;
btn.FindForm().Close();
}
对于您的代码(我不建议使用),修复将是
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();
}
在acceptButton
的点击事件中添加this.Close()
。您可以动态地将事件附加到它。创建按钮时,执行acceptButton.Click += new System.EventHandler(accepButton_click);
并创建匹配功能,或在执行+=后按Tab键两次。