如何在主表单之前显示辅助表单?

时间:2014-02-23 19:22:35

标签: c# winforms

我有一个应用程序,提示用户在表单中输入密码。但是,主要表格显示在次要表格之后。如何在用户输入密码之前不显示主表单?

修改

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

3 个答案:

答案 0 :(得分:4)

只需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
    }
}

对我来说,似乎比试图阻止主窗体在其构造函数中显示更合乎逻辑的方法。

干杯

答案 1 :(得分:1)

.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();

答案 2 :(得分:0)

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

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

有关进一步参考,请参阅:http://msdn.microsoft.com/en-us/library/aa984358%28v=vs.71%29.aspx