我有一个表单,我想提供一些安全性,但到目前为止,我只创建了一个表单来完成我的所有工作。我想在应用程序启动时创建一个在我的主表单前弹出的新表单。然后验证针对MySQL数据库输入的密码。我有所有的MySQL东西,但想知道如何在我的主窗体前面弹出另一个窗体,它禁用主窗体,等待密码窗体验证,然后在验证窗体后消失并让用户执行他们的工作。我还需要将经过身份验证的用户的信息传回我的主要表单。
答案 0 :(得分:7)
您可以创建新表单,然后使用ShowDialog功能。如果您从主表单中显示表单,它将以模态方式显示。
以登录样式创建并在用户通过身份验证时关闭表单,如果用户名和密码不正确则显示错误。
来自MSDN:
public void ShowMyDialogBox()
{
Form2 testDialog = new Form2();
// Show testDialog as a modal dialog and determine if DialogResult = OK.
if (testDialog.ShowDialog(this) == DialogResult.OK)
{
// Read the contents of testDialog's TextBox.
this.txtResult.Text = testDialog.TextBox1.Text;
}
else
{
this.txtResult.Text = "Cancelled";
}
testDialog.Dispose();
}
答案 1 :(得分:1)
我更喜欢使用ApplicationContext来表示此类型的日志< - > shell形式转换行为。
您的主要方法:
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyFancyContext());
}
MyFancyContext
的实施:
public class MyFancyContext : ApplicationContext
{
private LogOnForm logOnForm;
private ShellForm shellForm;
public MyFancyContext()
{
this.logOnForm = new LogOnForm();
this.MainForm = this.logOnForm;
}
protected override void OnMainFormClosed(object sender, EventArgs e)
{
if (this.MainForm == this.logOnForm
&& this.logOnForm.DialogResult == DialogResult.OK)
{
// Assume the log on form validated credentials
this.shellForm = new ShellForm();
this.MainForm = this.shellForm;
this.MainForm.Show();
}
else
{
// No substitution, so context will stop and app will close
base.OnMainFormClosed(sender, e);
}
}
}
MainForm
是当前正在接收消息的表单。
这种类型的设置的优点是,如果你想做一些事情,比如在一些空闲超时之后隐藏shell表单并重新显示表单上的日志,我们就有一个类来实现这个功能。
答案 2 :(得分:0)
您可以从主窗体的构造函数中调用showdialog(loginform),如果成功则返回true,或者在加载主窗体之前将启动更改为登录窗体。显示对话框是模态的。