【问题标题】:Make the startup form visible again after hiding it隐藏后使启动窗体再次可见
【发布时间】:2016-11-08 16:48:23
【问题描述】:

我正在尝试用 C# 创建一个两种形式的 Windows 应用程序。为了简单起见并帮助我在其他地方使用它之前弄清楚它,我基本上创建了一个 Windows 窗体应用程序,其中包含两个窗体:Form1 和 Form2,Form1 在启动时显示。点击一个按钮,我可以让Form1“消失”,而Form2:

private void button1_Click(object sender, EventArgs e)
{
    Form2 x = new Form2();
    x.Show();
    this.Hide();
}

这很好用。但是,当我想返回 Form1(通过使其再次可见)并卸载 Form2 时,我不确定如何继续对 Form2 进行编码以使用按钮单击将用户返回到 Form1。我不确定要参考什么来使该表单再次可见,而不必创建一个新的 Form1 并加载它,从而将我原来的启动表单留在内存中。

您能提供的任何帮助都会很棒!提前致谢,

-一月

【问题讨论】:

  • 将原始表单作为变量传递给第二个表单,您需要将其存储以便能够再次调用它 - 在Form2 构造函数Form2(Form1 x) 中并将其存储为变量,然后当你想重新打开它你可以从Form2的变量中调用它
  • x.FormClosing += (s, cea) => { if (!cea.Cancel) this.Show(); };看看其他程序这样做的方式,他们很少交换窗口。使用交换其内容的单个主窗口是正常的 UI。你可以通过创建用户控件而不是表单来实现。

标签: c# winforms visible


【解决方案1】:

正如 Alfie 评论所暗示的,您需要以某种方式控制每个表单的实例。

我建议使用带有两个变量的静态类。启动时,将表单链接到静态类中的这些公共属性。

类似这样的:

public static class App {

  public static Form Form1;
  public static Form Form2;

}

在启动或点击方法时,你会说:

private void button1_Click(object sender, EventArgs e)
{  
    if (App.Form1 != null)
      {
        App.Form1 = new Form1();
      }
    App.Form1.Show();
    App.Form2.Hide();
}

【讨论】:

  • Ofc 你会检查所有表单属性调用。但我敢肯定,你得到了嘘声。
【解决方案2】:

这样做:

private void button1_Click(object sender, EventArgs e)
    {
        Form2 x = new Form2();
        this.Hide();
        x.ShowModal();
        this.Show();
    }

【讨论】:

  • 谢谢大家!这里有很多很棒的想法。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多