这是我的问题..从表单1,我想当用户点击更新项目时,表单2将打开,但表单1仍将保持打开状态。此时,我希望表单1启用为false,我已经完成了。但我希望当表单2关闭时,表单1启用应该再次为真。我不能这样做......这是我的代码:
表格1:
private void btnEditItem_Click(object sender, EventArgs e){
Form3 form3 = new Form3();
form3.Show();
this.Enabled = false;
}
在表单2中(更新后用于更新项目):
private void Form3_FormClosing(object sender, FormClosingEventArgs e)
{
Form1 form1 = new Form1();
form1Here.Enabled = true;
}
在这种情况下,它将打开另一个Form1。问题是,我怎么想“在不打开它的情况下再次启用表格1?”请帮助我提供一些可能的样本。致谢
答案 0 :(得分:1)
将处理程序附加到表单。
Form3 form3 = new Form3();
form3.FormClosed += new FormClosedEventHandler(frm3_FormClosed);
form3.Show();
private void frm3_FormClosed(object sender, FormClosedEventArgs e)
{
this.Enabled = true;
}
或者您可以使用ShowDialog
打开一个窗口,仅在新打开的窗口关闭时返回。
答案 1 :(得分:0)
根据您的描述,您似乎需要一个模态对话框。
来自MSDN Modal and Modeless Dialog Boxes:
必须先关闭(隐藏或卸载)模式对话框 继续使用应用程序的其余部分
这意味着如果表单1将表单2作为模式对话框打开,表单1将保持可见,但它已被禁用,在您关闭表单2之前,您无法对其执行任何操作。你的话:"表格1被禁用,当表格2关闭时表格1再次启用"。
代码:
private void btnEditItem_Click(object sender, EventArgs e)
{
using (Form3 form3 = new Form3()}
{
var dlgResult = form3.ShowDialog(); // show form 3 as a modal dialog box
// halt this procedure until form3 is closed
// handle the result of form3:
if (dlgResult == DialogResult.OK)
{
var x = form3.SomePropery;
ProcessDialogOutput(x);
}
}
}
using语句不是必需的,但它是整洁的编程,因为Form3实现了IDisposable