【问题标题】:Windows forms spinning in c#在 C# 中旋转的 Windows 窗体
【发布时间】:2010-09-08 10:06:28
【问题描述】:

我有两个窗体。现在我必须关闭第一个窗体并显示第二个窗体,反之亦然。我该怎么做。我将此指针传递给第二个窗体的构造函数,然后尝试 关闭它,但这不起作用。我不能在这里使用 showdialog。

【问题讨论】:

标签: c# winforms


【解决方案1】:

在 Program 类的每个表单中添加静态变量:

static class Program
{
    public static Form1 f1=null;
    public static Form2 f2 = null;

    public static FullClose=false;

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        f1=new Form1();
        f2 = new Form2();

        Application.Run(f1);
    }
}

然后在每个表单的Form_Closing事件中:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (Program.FullClose==false)
    {
       e.Cancel = true;
       this.Visible = false;

       Program.f2.Show();
    }
}

(在 Form2 中将 Program.f2.Show() 更改为 Program.f1.Show())。

当然,这将阻止应用程序关闭,因此您应该提供一个额外的按钮(或类似按钮)来设置一个布尔静态变量 (FullClose),Form_Closing 事件可以检查它们是否应该正确关闭。

【讨论】:

    【解决方案2】:

    你必须在你的应用程序中设置,关闭不是那么主窗体被关闭,那么如果所有窗体全部关闭。

    您必须将主窗体的指针传递给第二窗体,并且主窗体必须具有第二窗体指针。

    然后在您的表单中实现OnClosing 事件,然后在她的实现中打开其他表单,如果此成功返回,否则将 Cancel 设置为 true 并返回。

    【讨论】:

      【解决方案3】:

      在每种情况下,都有一种形式,它代表您的应用程序的生命。此表单将通过调用在您的Program.cs 文件中启动

      Application.Run(new MyForm());
      

      如果你试图以这种形式开始另一个,然后这会杀死他的创造者,这总是会导致一些糟糕的设计。

      相反,您应该创建一些超级形式。它是不可见的,并且包含这两种形式之间的粘合代码。启动后,它会立即创建两个表单并显示第一个表单。它还以两种形式注册到(自写)事件,声称显示另一种形式。如果您的不可见表单从一个表单获取事件,它只会使发件人不可见并显示另一个表单。

      最后但并非最不重要的是,您需要在两个(或至少一个)表单中进行第二个事件,这将关闭超级表单并关闭应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多