C# 创建一个登录表单

C# 创建一个登录表单,c#,winforms,C#,Winforms,我有一个表单,我想提供一些安全性,但到目前为止,我只创建了一个表单来完成我的所有工作。我想创建一个新表单,当应用程序启动时,它会出现在我的主表单前面。然后根据MySQL数据库验证输入的密码。我已经记下了MySQL的所有内容,但是不知道如何在我的主窗体前面弹出另一个窗体,它禁用主窗体,等待密码窗体验证,然后在窗体验证后消失,让用户执行他们的工作。我还需要将经过身份验证的用户信息传输回我的主窗体。您可以从主窗体的构造函数调用,如果成功,则返回true,或者在加载主窗体之前将的启动更改为登录窗体。“显

我有一个表单,我想提供一些安全性,但到目前为止,我只创建了一个表单来完成我的所有工作。我想创建一个新表单,当应用程序启动时,它会出现在我的主表单前面。然后根据MySQL数据库验证输入的密码。我已经记下了MySQL的所有内容,但是不知道如何在我的主窗体前面弹出另一个窗体,它禁用主窗体,等待密码窗体验证,然后在窗体验证后消失,让用户执行他们的工作。我还需要将经过身份验证的用户信息传输回我的主窗体。

您可以从主窗体的构造函数调用,如果成功,则返回true,或者在加载主窗体之前将的启动更改为登录窗体。“显示”对话框是模态对话框。

您可以创建一个新表单,然后使用该函数。如果从主窗体显示窗体,它将以模态方式显示

以登录方式创建此表单,如果用户经过身份验证,则关闭表单;如果用户名和密码不正确,则显示错误

从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();
}
我更喜欢使用这种登录表单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表单并重新显示登录表单,我们有一个类来实现此功能。

为什么不使用模态表单?+1来使用ShowDialog():@muncherelli:Show()和ShowDialog()之间的重要区别是因为ShowDialog()强制用户响应打开的窗口,他们无法最小化窗口并继续使用应用程序。Show()允许用户继续使用主应用程序。我是否将其放在Form1\u加载方法中?是否添加登录按钮?或者你只是想让它自动弹出?在显示表单之前,应确保表单已完成加载。此链接告诉您Windows窗体的事件顺序:我看不到将此代码放在何处,因此它会在窗体加载后显示。如果我将其放入Form1\u Load,则在显示表单之前会弹出该框。我更希望它位于主窗体的前台(模型)。form.Showed是在构造和渲染窗体时触发的最终事件。当窗体实际显示时,将激发Form.Showed。尝试处理Form.Showed事件并在该函数中添加代码