1

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

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 回答 4

3

问题是这条线:

Login login = new Login();

这是用一个作为局部变量的新实例来隐藏login实例字段Login,因此不是访问Login用户之前与之交互的创建的,而是访问一个空白的。您可以删除上面的代码行。

于 2013-01-24T14:59:41.693 回答
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!");
       }
   }
}
于 2013-01-24T15:01:13.657 回答
1

什么时候,在这两行之间,usernamelogin设置的?

Login login = new Login();
string username = login.returnUsername();
于 2013-01-24T15:01:47.837 回答
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;
       }
于 2013-01-24T15:02:57.373 回答