好的这就是我在做的事。
StartMenu表单有button2-当单击按钮2时,它会弹出一个新表单并被禁用。 现在新的表单(InchMm转换表单)已经启动,当我完成该表单时,我点击了X按钮。完成后,我想从StartMenu表单启用Button2。我的代码如下。
的StartMenu
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();
}
现在我收到一条错误,指出非静态字段,方法或属性需要对象引用。现在我知道这应该是我脸上的形式,但我还在学习很多,我觉得我很接近。
答案 0 :(得分:3)
我会尝试这个
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;
}
答案 1 :(得分:1)
将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;
答案 2 :(得分:1)
除了其他答案,这是正确的,我想建议其他解决方案。因为您在子表单中使用IsMdiContainer
和MDIParent
(顺便提一下,按钮点击时设置了MDI容器),您可以访问父表单,如下所示:
private void InchMm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
StartMenu form = this.MDIParent as StartMenu;
if(form != null)
form.enableB();
}