你需要的是打开的实际 WindowSettings
实例,而不是新创建一个。
目前,你正在创建一个新的 WindowSettings
实例并对其调用 Close
。这没有任何作用,因为这个新实例从未被显示过。
相反,当显示 DialogSettingsCancel
时,将当前实例的 WindowSettings
设置为其父对象。
像这样:
在 WindowSettings
中:
private void showDialogSettings_Click(object sender, EventArgs e)
{
var dialogSettingsCancel = new DialogSettingsCancel();
dialogSettingsCancel.OwningWindowSettings = this;
dialogSettingsCancel.Show();
}
在DialogSettingsCancel
中:
public WindowSettings OwningWindowSettings { get; set; }
private void button1_Click(object sender, EventArgs e)
{
this.Close();
if(OwningWindowSettings != null)
OwningWindowSettings.Close();
}
这种方法考虑到一个 DialogSettingsCancel
可能会在没有父级 WindowsSettings
的情况下打开。
如果两者始终连接在一起,您应该改用构造函数参数:
在 WindowSettings
中:
private void showDialogSettings_Click(object sender, EventArgs e)
{
var dialogSettingsCancel = new DialogSettingsCancel(this);
dialogSettingsCancel.Show();
}
在DialogSettingsCancel
中:
WindowSettings _owningWindowSettings;
public DialogSettingsCancel(WindowSettings owningWindowSettings)
{
if(owningWindowSettings == null)
throw new ArgumentNullException("owningWindowSettings");
_owningWindowSettings = owningWindowSettings;
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
_owningWindowSettings.Close();
}