【问题标题】:How to close a form and open a new form up?如何关闭表单并打开新表单?
【发布时间】:2010-12-20 20:18:18
【问题描述】:

我想知道打开新表单后如何关闭表单。

例如,我有一个登录表单,当他们登录时,我打开了一个新表单,但我想关闭登录表单。

那我该怎么做呢?

我在 windows mobile 6 compact edition 上制作这些表格。不确定在 Windows 窗体中是否会有所不同。

【问题讨论】:

    标签: c# winforms windows-mobile compact-framework


    【解决方案1】:

    可以这样:

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
    
            if (DialogResult.OK == new LoginForm().ShowDialog())
            {
                Application.Run(new MainForm());
            }
        }
    }
    

    如果凭据有效,应确保 LoginForm 以 DialogResult.OK 关闭,否则以 DialogResult.Cancel 关闭:

    private void ValidateLogin(...)
    {
      ... // check credentials
    
      if(validCredentials)
      {
        this.DialogResult = DialogResult.OK;
        this.Close();
      }
      else
      {
       ... // up to you, maybe keep the form displayed to give user a chance to enter correct credentials
      }
    }
    

    }

    无需隐藏任何东西。

    【讨论】:

      【解决方案2】:

      如果主窗体是登录窗口,您将只能隐藏它,因为如果您关闭它,所有其他子窗口也将被关闭。 我猜你有两个选择:

      1- 将您的应用程序的表单作为主要表单。当应用程序启动时,隐藏它并显示登录窗口。登录窗口关闭后,显示主窗体。

      2- 一旦用户在登录窗口中输入他的凭据,隐藏它(不要关闭它),然后打开另一个表单。当第二个关闭时,关闭两者以关闭应用程序。

      【讨论】:

      • 如果不是主窗体怎么办?像我一样,如果我这样做 -> 登录 -> 第二种形式 -> 第三种形式。我至少可以关闭第二个表单吗?
      • 最简单的方法是保留一个表单作为主要表单,但它可以始终隐藏。您可以通过调用 Application.Run(...); 来避免这种情况。多次,但您可能会在这些调用之间失去应用上下文。
      【解决方案3】:

      大多数桌面应用程序将登录表单实现为模式对话框。如果你做同样的事情,你将首先显示主窗体,然后立即从主窗体的 form_loaded 事件将登录显示为模式对话框。登录对话框关闭后,您可以从中获取登录凭据并继续。

      【讨论】:

        【解决方案4】:

        只需致电Form.Close()

        您需要为打开的登录表单获取一个对象,或者如果您在登录表单中想要关闭它,请尝试调用this.Close()

        【讨论】:

          【解决方案5】:

          我疯了,但我建议只使用一种形式。将其余的表单设置为 UserControls,然后将它们换入和换出主表单。那么你就不用担心这些垃圾了。

          我的 Program.cs 通常看起来像:

          public class Program
          {
              static void Main()
              {
                  MyApp application = new MyApp();
                  application.Initialise();
                  Application.Run(application.MainForm);
              }
          }
          

          这样我可以在表单之外保持初始化和逻辑。

          【讨论】:

            猜你喜欢
            • 2014-04-07
            • 2018-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-13
            • 1970-01-01
            相关资源
            最近更新 更多