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

10-10 00:10