您需要開放的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();
}
您的「設置」從未顯示爲首先關閉,您可能正在尋找其他實例 –
發生這種情況是因爲您在關閉另一個「窗口」之前關閉了正在處理單擊事件的「窗口」 '。這不是Form類,這是一個'Window'類的巨大差異。此外,設置不等於WindowSettings的實例,它等於一些完全不同的實例。使用VS調試器。 –