好的,这就是我正在做的。
"开始菜单"窗体有按钮2-单击按钮2时,将显示一个新窗体并被禁用。现在,新表单(InchMm转换表单)已经启动,当我完成该表单时,我按下X按钮。完成此操作后,我希望启用"开始菜单"窗体中的按钮2。下面是我的代码。
开始菜单
private void button2_Click(object sender, EventArgs e)
{
this.IsMdiContainer = true;
InchMm_Conversion f = new InchMm_Conversion();
f.MdiParent = this;
f.Show();
button2.Enabled = false;
}
private void button3_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.ArrangeIcons);
}
public void enableB()
{
button2.Enabled = true;
}
InchMm转换形式
private void InchMm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
StartMenu.enableB();
}
现在我得到一个错误,说非静态字段、方法或属性需要对象引用。现在我知道这在我的脸上应该是正确的,但我仍在学习,我认为我已经接近了。
我会试试这个
private void button2_Click(object sender, EventArgs e)
{
this.IsMdiContainer = true;
InchMm_Conversion f = new InchMm_Conversion();
f.MdiParent = this;
//Here you set an event. When the form closes the here specified method is called
f.FormClosed += f_FormClosed;
f.Show();
button2.Enabled = false;
}
private void button3_Click(object sender, EventArgs e)
{
this.LayoutMdi(MdiLayout.ArrangeIcons);
}
//This method is executed when the form is closed
void f_FormClosed(object sender, FormClosedEventArgs e)
{
button2.Enabled = true;
}
将InchMm_Conversion()
构造函数修改为InchMm_Conversion(StartMenuForm)
。因此,您可以在构造中将"父"对话框传递给InchMm_Conversion。在私有字段中保存一个引用,当关闭子窗体时可以访问它。(ReferenceToStartMenuForm.enableB()
)(我知道有更优雅的解决方案,但这很容易实现)
InchMm_Conversion(StartMenuForm form)
{
myForm = form;
}
private void InchMm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
myForm.enableB();
}
private StartMenuForm myForm;
除了其他正确的答案外,我还想提出其他解决方案。因为您在子窗体中使用IsMdiContainer
和MDIParent
(顺便说一句,在单击按钮时设置MDI容器很奇怪),所以您可以访问父窗体,如下所示:
private void InchMm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
StartMenu form = this.MDIParent as StartMenu;
if(form != null)
form.enableB();
}