【问题标题】:How do I show a secondary form before the main form?如何在主窗体之前显示辅助窗体?
【发布时间】:2022-01-08 10:34:14
【问题描述】:

我有一个应用程序会提示用户在表单中输入他的密码。但是,主窗体显示在辅助窗体之后。在用户输入密码之前,如何使主表单不显示?

编辑

    //main form:
    public Form1()
    {
        new InputPswrd().Show();
        InitializeComponent();
    }

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    只需我的 2 美分,但您可以让登录表单成为显示的第一个表单,然后从登录表单调用您的“主”表单。

    假设是典型的 Windows 窗体应用程序,您可以像这样更改 Program.cs 的内容:

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new LoginForm()); //calling the Login form instead
        }
    }
    

    在我看来,这比试图阻止主窗体出现在其构造函数中更合乎逻辑。

    干杯

    【讨论】:

    • 程序中如何关闭输入窗体,如果手动关闭,主窗体会关闭。
    【解决方案2】:

    .Show() 更改为.ShowDialog(),以将密码表单显示为模式对话框,这将阻止下一行代码执行,直到您关闭密码表单。

    var inputPswrdForm = new InputPswrd();
    inputPswrdForm.ShowDialog();
    

    我假设您在继续之前还想知道用户的密码是否有效。

    您可以在第二个表单上创建一个属性,一旦控件返回第一个表单,您就可以检查该属性,例如:

    public bool IsUserAuthenticated { get; set; }
    

    那么在第一种形式中:

    var inputPswrdForm = new InputPswrd();
    inputPswrdForm.ShowDialog();
    
    if (!inputPswrdForm.IsUserAuthenticated)
        // password was wrong, take some action
    
    InitializeComponent();
    

    【讨论】:

      【解决方案3】:

      Form.ShowDialog 方法有一个可选参数 owner,可用于指定表单的父子关系。例如,当您的主窗体中的代码显示一个对话框时,您可以传递 Me(在 Visual Basic 中)或 this(在 C# 中)作为对话框的所有者,以将您的主窗体设置为所有者,如以下代码所示.

      Form f = new Form();
      f.ShowDialog(this);
      

      更多参考请参考:http://msdn.microsoft.com/en-us/library/aa984358%28v=vs.71%29.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多