为了账号安全,请及时绑定邮箱和手机立即绑定

在其他类中使用类中的变量

在其他类中使用类中的变量

C#
烙印99 2023-08-20 09:33:38
我创建一个类,定义一些变量及其属性。我还有两个类“Form1”和“Form2”。我在“Form1”中为这些变量赋值,但是当我在赋值后想使用“Form2”中的值并通过 MessageBox.Show() 显示它们时,我发现变量是空的。class Property{    private string a_username;    private string a_email;    public string username    {        get { return a_username; }        set { a_username = value; }    }    public string email    {        get { return a_email; }        set { a_email = value; }    }    public string password { get; set; } = "88306540";}作业:(该函数位于“Form1”中)Property pro = new Property();private void CreateUserInform()    {        userid = File.ReadLines(filePath).Skip(idx).Take(1).First();       // MessageBox.Show(userid);        HtmlElementCollection elemcol = webBrowser2.Document.GetElementsByTagName("option");        int i = 0;        string[] mailservices = new string[elemcol.Count];        foreach (HtmlElement elem in elemcol)        {            mailservices[i] = elem.InnerText;            i += 1;        }        pro.username = userid;        Random rand = new Random();        mailservice = mailservices[rand.Next(10)];        pro.email = pro.username + mailservice;        wb2func_create_mail();    }调用函数:(该函数位于“Form2”中,在上一个函数之后调用。)Property pro = new Property();public void signup_fill()    {         HtmlElementCollection elemcol = site.Document.GetElementsByTagName("input");        foreach (HtmlElement elem in elemcol)        {            if (elem.Name == "login")                elem.SetAttribute("value", pro.username);            if (elem.Name == "remail")                elem.SetAttribute("value", pro.email);            if (elem.Name == "password")                elem.SetAttribute("value", pro.password);            if (elem.Name == "password2")                elem.SetAttribute("value", pro.password);        }        MessageBox.Show(pro.username);    }我应该提到的是,“密码”变量显示得很好,但其他变量显示为空。另外,当我在我用来定义它们的“Form1”中调用它们时,它工作得很好并显示了正确的分配。
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

似乎密码显示得很好,因为它是在 Property 类本身定义的,因此,每次您创建该类的新对象时,都会默认设置它,直到您更改它。

您在 Form 2 中看不到 Form 1 中的数据的原因似乎是您没有将 Property 对象从 Form 1 传递到 Form 2,因此您有一个 Property 对象,其中填充了 Form 1 中的数据,但在 Form 2 中您仍然保留新创建的 Property 对象。只需修改 Form 2 构造函数,使其接受 Property 参数并从 Form 1 传递该参数即可。

示例(这适用于您的 Form2 代码):

public Form2 (Property form1Property){
   InitializeComponent();
   pro = form1Property;
}

这将创建一个代码,每次创建新的 Form2 时都会执行该代码,并要求您传递一个 Property 对象来创建它(new Form2(pro);在 Form1 中),以便它将 Form2 的 Property 对象分配给您在 Form1 上创建它的对象时传递的对象。

还要将您的 Property 类设为公共,以便您可以将其用作 Form2 构造函数中的参数。

希望这对您有帮助!

PS:查看您的代码,我发现您正在创建一个全局 Form2 对象。您应该在显示它之前在 btn_start_Click 创建它,以便正确填充数据(当您显示它时,您的 Form1 的 Property 对象已填充,现在当您创建它时,它没有填充)


查看完整回答
反对 回复 2023-08-20
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信