好的,Windows 窗体类 WindowSettings 和窗体都有一个“取消”按钮。当用户单击该按钮时,将弹出对话框 DialogSettingsCancel 并询问用户是否确定要执行该操作。该对话框有 2 个按钮,一个"is"按钮和一个“否”按钮。如果用户单击"is"按钮,我希望关闭 DialogSettingsCancel 和 WindowSettings。
我在 DialogSettingsCancel 中的 button_Click 事件处理程序:
private void button1_Click(object sender, EventArgs e)
{
//Code to trigger when the "Yes"-button is pressed.
WindowSettings settings = new WindowSettings();
this.Close();
settings.Close();
}
当我运行我的应用程序并转到设置表单,单击“取消”按钮,然后单击"is"按钮时,只有 DialogSettingsCancel 关闭而没有关闭 WindowSettings。
为什么它不起作用?
我也尝试过改变
this.Close();
settings.Close();
到
settings.Close();
this.Close();
但还是一样的结果。
最佳答案
您需要打开的 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();
}
关于c# - 如何关闭表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14381705/