我的代码中有什么问题? c#winforms

时间:2011-01-22 06:37:32

标签: c# winforms

我有两种表单Login和Main表单。最初,将显示登录表单,当用户通过身份验证时,将显示主表单并关闭登录表单。

它有点工作,但我必须两次点击btnLogin(登录表单中的一个按钮)才能关闭登录表单并显示主表单。

这是我的代码。

Program.cs (登录表单)

namespace Login
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Login fLogin = new Login();
            if (fLogin.ShowDialog() == DialogResult.OK)
            {
                Application.Run(new Main());
            }
        }
    }
}

登录表单

namespace Login
{
    public partial class Login : Form
    {
        public Login()
        {
            InitializeComponent();
        }

        private void Login_Load(object sender, EventArgs e)
        {

        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            // initially btnLogin has a DialogResult property set to None
            Authenticate();
        }

        private void Authenticate()
        {
            SqlCeConnection conn = new SqlCeConnection(@"Data source=d:/BIMS.sdf");
            conn.Open();
            SqlCeCommand cmd = new SqlCeCommand(Properties.Resources.CheckIfUserExists, conn);
            cmd.Parameters.Add("username", txtUsername.Text.Trim());
            cmd.Parameters.Add("password", txtPassword.Text.Trim());

            SqlCeDataReader dr = cmd.ExecuteReader();
            bool hasRow = dr.Read();
            if (hasRow)
            {
                btnLogin.DialogResult = DialogResult.OK;
            }
        }
    }
}

你认为我做错了什么? 感谢....

5 个答案:

答案 0 :(得分:3)

只需更改

if (hasRow)
{
  // btnLogin.DialogResult = DialogResult.OK;
     this.DialogResult = DialogResult.OK;
     this.close();
}

答案 1 :(得分:1)

如果要关闭表单(在设置了所需的Form.Close()之后),则应该在按钮事件处理程序中调用DialogResult

据我所知,这不会自动发生。

我从来没有采用任何其他方式,这种方法一直对我有用。

答案 2 :(得分:1)

试试这个: -

  

命名空间登录

     

{

     

静态类程序

     

{          ///          ///应用程序的主要入口点。         ///

   [STAThread]
   static void Main()
   {
       Application.EnableVisualStyles();
       Application.SetCompatibleTextRenderingDefault(false);
       Application.Run(new Login());
   }
     

}

     

}

&GT;

  

命名空间登录   {      公共部分登录:表格      {          公共登录()           {               的InitializeComponent();           }

    private void Login_Load(object sender, EventArgs e)
    {

    }

    private void btnLogin_Click(object sender, EventArgs e)
    {
        // initially btnLogin has a DialogResult property set to None
        Authenticate();
    }

    private void Authenticate()
    {
        SqlCeConnection conn = new SqlCeConnection(@"Data source=d:/BIMS.sdf");
        conn.Open();
        SqlCeCommand cmd = new SqlCeCommand(Properties.Resources.CheckIfUserExists, conn);
        cmd.Parameters.Add("username", txtUsername.Text.Trim());
        cmd.Parameters.Add("password", txtPassword.Text.Trim());

        SqlCeDataReader dr = cmd.ExecuteReader();
        bool hasRow = dr.Read();
        if (hasRow)
        {
            Main formmain = new Main();
            formmain.Show();
            this.Dispose(); // U can also use this.Close();
        }
    }
}

}

答案 3 :(得分:0)

最有可能是您的Authenticate()出现问题。你可以删除该代码,只需

private void Authenticate()
{
   btnLogin.DialogResult = DialogResult.OK;
}

这将告诉您问题是使用验证码还是使用gui。

如果使用您的身份验证码,您可能需要多做一些来访问数据库(检查并查看您是否已连接等等)

答案 4 :(得分:0)

如上一篇文章所述,Authenticate方法可能存在问题...... 可能需要更长的时间来访问数据库.. 下面的代码将帮助我们了解Authenticate是否已完成处理......

private void btnLogin_Click(object sender, EventArgs e)
{
      btnLogin.Enabled = false; 

      // initially btnLogin has a DialogResult property set to None
      Authenticate();
      // better place call to Authenticate in try catch blocks
      // to prevent btnLogin in a disabled state forever if Authenticate fails with
      // an exception ...
      // also if an exception occurs show that in a message box

      btnLogin.Enabled = true;
}

在Main中,一旦用户通过身份验证,请关闭登录表单

 Login fLogin = new Login();
            if (fLogin.ShowDialog() == DialogResult.OK)
            {
                fLogin.Close();
                Application.Run(new Main());
            }