【发布时间】:2022-01-08 10:34:14
【问题描述】:
我有一个应用程序会提示用户在表单中输入他的密码。但是,主窗体显示在辅助窗体之后。在用户输入密码之前,如何使主表单不显示?
编辑:
//main form:
public Form1()
{
new InputPswrd().Show();
InitializeComponent();
}
【问题讨论】:
我有一个应用程序会提示用户在表单中输入他的密码。但是,主窗体显示在辅助窗体之后。在用户输入密码之前,如何使主表单不显示?
编辑:
//main form:
public Form1()
{
new InputPswrd().Show();
InitializeComponent();
}
【问题讨论】:
只需我的 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
}
}
在我看来,这比试图阻止主窗体出现在其构造函数中更合乎逻辑。
干杯
【讨论】:
将.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();
【讨论】:
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
【讨论】: