首页 > 解决方案 > 从另一个类传入 WinForm 类的访问对象

问题描述

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

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);

 }

拜托,根据传递给第一堂课的内容,我有什么权利无法访问该对象?感谢任何帮助。

标签: c#winforms

解决方案


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

在您的“测试”方法中,代码是:

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

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

如果你把它分解,它会这样做:

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

查看您从节目中调用的表格:

用户你;

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 覆盖表单变量,然后将 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; }

然后你可以访问你传入的内容:

用户 myuser = myForm.User;

这使您不必通过该Testing方法。


推荐阅读