【问题标题】:C# - Unable to see Form1 after closing Form2 via the crossC# - 通过十字关闭 Form2 后看不到 Form1
【发布时间】:2016-03-10 21:31:30
【问题描述】:

我是 C# 的新手,花了一整天的时间来解决这个问题,如果这很简单,或者已经在其他地方,我很抱歉!我有两个表单,主要和配置。 Main 加载,并有一个按钮来打开 Config 表单,然后隐藏自身:

private void btnConfig_Click(object sender, EventArgs e)
{
    Config config = new Config();
    config.Show(); 
    this.Visible = false;
}

它工作得很好,配置表单打开。 Config from 有两个按钮(一个 Save 和一个 Close 按钮​​)。本质上,两个按钮的最终效果是一样的,关闭Config窗体,重新显示Main窗体,代码如下:

    private void btnClose_Click(object sender, EventArgs e)
    {
        this.Hide();
        Main main = new Main();
        main.Visible = true;
    }      

问题是,如果我使用“cross”关闭配置屏幕,配置是“关闭”但不显示 Main,程序继续运行。我试过使用 OnFormClosing 并陷入了一个可怕的循环! Cross 应该和 Save/Close 按钮​​一样,隐藏 Config 表单并再次打开 Main。

【问题讨论】:

  • 当您编写 Main main = new Main(); 时,您实际上是在创建一个新表单,而不是再次显示 Main 表单。
  • 使用 Form.OnClosing 事件捕获包括 X 在内的所有关闭动作。

标签: c# forms


【解决方案1】:

如果您想显示配置表单并在配置更改时重新显示主表单,您通常希望配置表单显示Modal

要显示模态表单,您将使用ShowDialog()ShowDialog() 也是一个阻塞呼叫,它使您能够从离开的地方接听电话。

在主窗体中:

private void btnConfig_Click(object sender, EventArgs e)
{
    var config = new Config(); 

    this.Visible = false;
    // this call blocks!
    var dialogResult = config.ShowDialog();

    // when the configform is closed, the code resumes here
    this.Visible = true;
}

这也为您提供了取消配置表单的可能性,方法是设置 配置表单的DialogResult 属性在关闭之前更改为DialogResult.Cancel

【讨论】:

  • 我喜欢。我从来没有想过这样做。 1^
【解决方案2】:

我不太确定你在寻找什么,但我会这样做。

将您的函数更改为以下内容,并在您的主表单类下拥有一个私有 Config 对象。

private Config config;
private void btnConfig_Click(object sender, EventArgs e)
{
    if(config==null || config.IsDisposed)
    {
        config = new Config(this); // Pass the main form into the constructor of config
    }
    config.ShowDialog(); 
    this.Visible = false;
}

创建一个构造函数(用于 Config),它将主窗体作为参数并将主窗体作为私有对象。这使您可以将原始表单显示为与每次都创建一个新表单相反。

private Form mainForm;
public Config(Form main)
{
    mainForm = main;
}

并更改您的关闭操作。

private void btnClose_Click(object sender, EventArgs e)
{
    this.Hide();
    mainForm.Visible = true;
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多