好的,因此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/