c# - 如何关闭表格

标签 c# winforms button formclosing

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

相关文章:

c# - 在读取和写入 MongoDB(C# 驱动程序)时,如何决定哪些异常值得重试?

c# - 将 Base64 图像上传到 Azure Blob

c# - 如何在 UpdatePanel 中添加我自己的自定义用户控件?

c# - 转换整数数组以用于 SQL "IN"子句

c# - 简单的线程编程

Windows 批处理文件启动带有按钮的 gui

c# - 如何在设计 View 中为自定义控件添加边框?

winforms - 复杂的多线程接口(interface)

javascript - 如何以编程方式禁用 onclick 按钮功能

WPF DropShadowEffect 中断按钮中的文本