从另一个类在WinForm类中传递的访问对象

时间:2018-08-04 05:47:55

标签: c# winforms

我在表单(用户仪表板)上有一个类,该类根据传递给它的内容显示用户信息。 我可以成功获取用户的名字和姓氏以及其他信息。但是现在的问题是,我在另一个类上有一个按钮,我想获得对已成功传递给用户仪表板的对象的访问权限。 所以,到目前为止,这里是我可以成功传递用户对象并使用它的代码

public partial class UserDashboard : Form
{
        public user user;
        private dbModel db;
        public UserDashboard(user user)
        {
            InitializeComponent();
            this.user = user;
            db = new dbModel();
            LoadUser(user);
        }
        public void LoadUser(user p)
        {
            Color c = lbluserDisplayName.ForeColor = GetLabelForeColor(p);
            if (c == null)
                lbluserDisplayName.Text = user.lastname.ToUpper() + " " + user.firstname;
            else if (c == Color.Red)
                lbluserDisplayName.Text = user.lastname.ToUpper() + " " + user.firstname;
            else
                lbluserDisplayName.Text = user.lastname.ToUpper() + " " + user.firstname;
            lblUserAddress.Text = user.street_address;
            lblUserEmail.Text = "E: " + user.email;
            lblUserHome.Text = "T: " + user.mobile;
            lblUserTelephone.Text = "H: " + user.phone;

        }
}

我试图将对象返回到此处传递的同一类上,以便可以在其他类上使用它

        public user Testing(user user)
        {
            return this.user = user;
        }

这是按钮所在的其他类,我需要根据传递给userDashboard的用户来访问该类。但是当我测试该对象时,其中没有数据。

public partial class StartPage : Form
{
    public StartPage()
    {
        InitializeComponent();

    }
user u;
private void button1_Click(object sender, EventArgs e)
{
   user u = udash.Testing(u);
   if (u == null)
   {
      MessageBox.Show("Empty data");
    }else
     MessageBox.Show(u.firstname);

 }

请问,基于传递给第一类的内容,我有什么不对的权限来访问该对象? 感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

代码存在的问题是,您正在擦除传递到表单中的表单user变量。

在“测试”方法中,代码为:

public user Testing(user user)
{
    return this.user = user;
}

这将使用您传入的内容更新表单中的本地用户变量!

如果将其分解,它会执行以下操作:

this.user = user;
return(this.user)

查看您从演出中调用的表单:

用户u;

private void button1_Click(object sender, EventArgs e)
{
   user u = udash.Testing(u);
   if (u == null)
   {
      MessageBox.Show("Empty data");
    }else
     MessageBox.Show(u.firstname);

 }

您定义变量user u,然后调用user u = udash.Testing(u),该变量将传入u变量,然后覆盖user形式的变量,最后返回您传入的内容您打电话给Testing

在任何时候都不会实例化u变量,因此您传入NULL,用NULL覆盖form变量,然后将NULL返回给调用表单。

如果将变量名替换为内容,我们将看到:

user u = null
udash.Testing(null)
this.user = null
return null;

这是您的“测试”方法的外观:

public user Testing()
{
    return(this.user);
}

这样,当您调用Testing时,您将返回实例化表单时传递的this.user

您应该清理user变量并将其变成公共属性:

public user User { get; set; }

然后,您可以访问所传递的内容:

user myuser = myForm.User;

这省去了使用Testing方法的麻烦。