将用户名传递给表单,但用户名返回null c#

时间:2013-01-24 14:55:43

标签: c# winforms

此代码用于返回登录表单中文本框的值。

public partial class Login : Form
{
    public string returnUsername()
    {
        string username = textBox1.Text;
        return username;
    }
} 

此代码允许显示ChangePass表单。

public partial class Mainmenu_Employee : Form
{
    private void changePasswd_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        this.Hide();
        Login login = new Login();
        ChangePass passwd = new ChangePass(login);
        passwd.Show();
    }
}

此代码用于从登录表单中获取用户名,以便我可以更改用户名的密码。

    public partial class ChangePass : Form
    {
       Login login = null; //parent form
       Mainmenu_Employee main = new Mainmenu_Employee();


       public ChangePass(Login login1)
       {
           InitializeComponent();
           login = login1;
       }

       private void buttonChangePass_Click(object sender, EventArgs e)
       {

           Model_DB_Employee emp = new Model_DB_Employee();
           //Login login = new Login();
           string username = login.returnUsername();


           if (textBoxNewPass.Text == string.Empty || textBoxConfirmPass.Text == string.Empty)
           {
               MessageBox.Show("Field cannot be empty!");
           }
           else
           {
               if (textBoxNewPass.Text == textBoxConfirmPass.Text)
               {

                   try
                   {

                       emp.changePasswd(username,textBoxConfirmPass.Text);
                       MessageBox.Show(username);
                       MessageBox.Show("Password updated!");
                       this.Hide();
                       main.Show();
                   }
                   catch(SystemException ex)
                   {
                       MessageBox.Show("Password not updated" + ex);
                   }

               }
               else
               {
                   MessageBox.Show("Passwords do not match!");
               }
           }
       }

更改密码功能:

    public void changePasswd(string username, string newpass) //change password
    {
        Model_Employee emp = new Model_Employee();

        //Hasher hash = new Hasher(); //call hasher class for hashing
        //string hashed;
        //string salt = emp.generateSalt(); //generate random salt
        //newpass = newpass + salt; //append salt to newpass
        //hashed = hash.encryption(newpass); //hash newpass


        for (int i = 0; i < rows.Count; ++i)
        {

            if ((string)empTab.Rows[i]["username"] == username)//check if ID matches
            {
                empTab.Rows[i]["passwd"] = newpass;  //set passwd to hash new password                

                //check if dataset has changes
                if (dataset.HasChanges())
                {
                    //update database
                    dbAdapter.Update(dataset, "employee");
                    MessageBox.Show("Employee Updated!");
                    refreshTable();

                }
                else
                {
                    refreshTable();
                }
            }
        }

    }

我正在尝试在用户登录时更改用户密码。

  1. 当他登录时,我想通过文本框捕获他的用户名。

  2. 登录后,会显示一个主菜单。

  3. 用户需要点击更改密码链接,系统会显示更改密码表单。

  4. 因此,我需要将用户名从登录表单传递到更改密码表单,以便使用更改密码功能。但是,我现在面临的问题是用户名不会从登录表单传递到更改密码表单。

4 个答案:

答案 0 :(得分:3)

问题在于:

Login login = new Login();

这会将login实例字段与Login的新实例作为局部变量进行着色,因此,不是访问之前创建的Login用户与之进行过互动,而是“重新访问空白的。你可以删除上面的代码行。

答案 1 :(得分:1)

问题在于,Login login = new Login()会影响您的类实例变量login。尝试:

private void buttonChangePass_Click(object sender, EventArgs e)
{
   Model_DB_Employee emp = new Model_DB_Employee();
   string username = login.returnUsername();

   if (textBoxNewPass.Text == string.Empty || textBoxConfirmPass.Text == string.Empty)
   {
       MessageBox.Show("Field cannot be empty!");
   }
   else
   {
       if (textBoxNewPass.Text == textBoxConfirmPass.Text)
       {
           try
           {
               emp.changePasswd(username,textBoxConfirmPass.Text);
               MessageBox.Show(username);
               MessageBox.Show("Password updated!");
               this.Hide();
               main.Show();
           }
           catch(SystemException ex)
           {
               MessageBox.Show("Password not updated" + ex);
           }
       }
       else
       {
           MessageBox.Show("Passwords do not match!");
       }
   }
}

答案 2 :(得分:1)

在这两行之间,新username中的login是否已设置?

Login login = new Login();
string username = login.returnUsername();

答案 3 :(得分:0)

您永远不会显示登录表单,您如何设置某人使用实际用户名设置textBox1?

你需要这样的东西

       string username = string.Empty;
       Model_DB_Employee emp = new Model_DB_Employee();
       using(Login login = new Login())
       {      
             if(DialogResult.OK == login.ShowDialog())
              username = login.returnUsername();
       } 
       if(username == string.Empty)
       {
            MessageBox.Show("Username required");
            return;
       }