此代码用于返回登录表单中文本框的值。
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();
}
}
}
}
我正在尝试在用户登录时更改用户密码。
当他登录时,我想通过文本框捕获他的用户名。
登录后,会显示一个主菜单。
用户需要点击更改密码链接,系统会显示更改密码表单。
因此,我需要将用户名从登录表单传递到更改密码表单,以便使用更改密码功能。但是,我现在面临的问题是用户名不会从登录表单传递到更改密码表单。
答案 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;
}