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

これらの2つの行の間usernameに、新しいのloginが設定されるのはいつですか?

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 に答える