首页 > 解决方案 > 如何在类之间传递变量?

问题描述

我有一个“分成”两部分的单一表格。第一部分有“用户 ID”(文本框)、“安全问题”(组合)和“安全问题”(文本框)的答案。它有一个“提交按钮”,用于检查数据库是否匹配安全/答案。如果找到匹配项,则启用下面的第二部分。

第二部分有“新密码”和“确认密码”,以及“更改”按钮。

我想要实现的是验证上面“UserID”的安全问题和答案匹配。我能做到的。但是,我想将“用户 ID”传递给“更改”按钮的单击事件,所以我不必再次要求“用户 ID”,也不要为数据库中的每个人更改密码。

这是我的代码的一部分:

private void btnchange_Click(object sender, EventArgs e)
{
    {
        //How do I pass UserID from "Submit"?
        if (txtnewpassword.Text == "")
        {
            MessageBox.Show("Please enter a new password...");
        }
        if (txtconfirmpassword.Text == "")
        {
            MessageBox.Show("Please confirm your new password...");
        }
        else
        {
            try
            {
                SqlConnection con = new SqlConnection(@"Data Source = (LocalDB)\MSSQLlocaldb; Initial Catalog = AdminAuthentication; Integrated Security = True");
                con.Open();

                if (txtnewpassword.Text == txtconfirmpassword.Text)
                {
                    string query = " update UserRegistration set [Password]= '" + txtnewpassword.Text + "' where UserID = '" /*+pass USERID here?*/ + "'";
                    SqlCommand cmd = new SqlCommand(query, con);
                    cmd.ExecuteNonQuery();

                    MessageBox.Show("Password Succesfully Updated!");
                    txtconfirmpassword.Clear();
                    txtnewpassword.Clear();
                    txtuserid.Clear();
                    this.Hide();
                    Loginsystem ls = new Loginsystem();
                    ls.Show();
                }
                else
                {
                    MessageBox.Show("The passwords do not match.Try again");
                    txtconfirmpassword.Clear();
                    txtnewpassword.Clear();
                }

                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error Occured" + ex);
            }
        }
    }
}

标签: c#

解决方案


Ciao,我会在持有 UserID 的类中引发一个事件。然后依赖类可以订阅该事件并将数据存储在将在btnchange_Click函数中读取的属性中。

public delegate void UserIDHandler(int UserID);
public class UserIDClass
{
    public event UserIDHandler UserIDEvent;
    ...
    public void Submit(object sender, EventArgs)
    {
       // retrieve your UserID then 
       if(UserIDEvent!= null)
          UserIDEvent(UserID);
    }
 }

 public class BtnChangeClass
 {
     public int UserID_imported = -1;
     UserIDClass yourObject = new UserIDClass();
     

     public BtnChangeClass()
     {
          yourObject.UserIDEvent += new UserIDHandler(hadleUserIDEvent);
     }

     protected void hadleUserIDEvent(int UserID)
     {
         UserID_imported = UserID;
     }
     
     private void btnchange_Click(object sender, EventArgs e) {
         //read UserID_imported
     }
}

推荐阅读