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

我创建一个类,定义一些变量及其属性。


我还有两个类“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”中调用它们时,它工作得很好并显示了正确的分配。


烙印99
浏览 113回答 1
1回答

慕森卡

似乎密码显示得很好,因为它是在 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 对象已填充,现在当您创建它时,它没有填充)
打开App,查看更多内容
随时随地看视频慕课网APP