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

C# 在其他类中使用类中的变量,c#,winforms,C#,Winforms,我创建了一个类,用它们的属性定义一些变量 我还有两个班“Form1”和“Form2” 我在“Form1”中为这些变量赋值,但当我在赋值后想使用“Form2”中的值并通过MessageBox.show()显示它们时,我发现这些变量是空的 class Property { private string a_username; private string a_email; public string username { get { return

我创建了一个类,用它们的属性定义一些变量

我还有两个班“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”)

调用函数:(此函数为“Form2”,在前一个函数之后调用。)

我应该提到的是,“password”变量显示得非常好,但其他变量显示为空

同样,当我在我用来定义它们的“Form1”中调用它们时,它工作得很好,并且显示了正确的赋值

完整的表单2代码:

namespace Bypassing
{
public partial class Form2 : Form
{

    string referal_link;

    Property pro = new Property();

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



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

    private void btn_fill_Click(object sender, EventArgs e)
    {
        signup_fill();
    }

    private void btn_logout_Click(object sender, EventArgs e)
    {           
        HtmlElementCollection elemcol = site.Document.GetElementsByTagName("a");
        foreach (HtmlElement elem in elemcol)
        {
            if (elem.InnerText == " Log out ")
                elem.InvokeMember("click");                
        }
    }

    private void btn_next_link_Click(object sender, EventArgs e)
    {

    }

    public bool btn_fill_enabled
    {
        get { return btn_fill.Enabled; }
        set { btn_fill.Enabled = value; }
    }

    public bool btn_logout_enabled
    {
        get { return btn_logout.Enabled; }
        set { btn_logout.Enabled = value; }
    }

    public bool btn_next_link_enabled
    {
        get { return btn_next_link.Enabled; }
        set { btn_next_link.Enabled = value; }
    }

    private void avelon_site_Completed(object sender, WebBrowserNavigatedEventArgs e)
    {
        Form1 main_win = new Form1();
        main_win.text_edit();
    }
}
}

表格1代码:

namespace BitcoinCloudMiningBypassApp
{

public partial class Form1 : Form
{

    private string mailservice;
    private string userid;
    int idx = 29;

    bool wb1flag = true;
    bool wb2flag = true;
    bool wb1ready = false;
    bool wb2ready = false;
    bool workflag = false;
    bool start = false;
    string filePath;        
    //StreamWriter file2 = new StreamWriter("avelon_users_email.txt", true);
    //StreamWriter file = new StreamWriter("avelon_referal_links.txt", true);        
    Property pro = new Property();

    private void OpenFileDialogForImportingUserId()
    {
        //var fileContent = string.Empty;

        using (OpenFileDialog openFileDialog = new OpenFileDialog())
        {
            openFileDialog.InitialDirectory = "C:\\";
            openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog.FilterIndex = 1;
            openFileDialog.RestoreDirectory = true;

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                //Get the path of specified file
                filePath = openFileDialog.FileName;
                btn_start.Enabled = true;

                ////Read the contents of the file into a stream
                //var fileStream = openFileDialog.OpenFile();

                //using (StreamReader reader = new StreamReader(fileStream))
                //{
                //    fileContent = reader.ReadToEnd();
                //}
            }
        }

    }

    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;
        //MessageBox.Show(avelon_email);
        wb2func_create_mail();
    }

    public Form1()
    {
        InitializeComponent();
        webBrowser2.Navigate("https://temp-mail.org/en/option/change/");

    }


    private void btn_start_Click(object sender, EventArgs e)
    {
        Form2 avelon = new Form2(pro);
        avelon.Show();
        //VPN vpn = new VPN();
        // MessageBox.Show(vpn.ConnectVPN(vpn.SetServer(0)).ToString());
        CreateAvelonUserInform();
        start = true;
        btn_load.Enabled = false;
        btn_start.Enabled = false;            
        avelon.btn_logout_enabled = true;
        btn_refresh.Enabled = false;
    }


    private void Form1_Load(object sender, EventArgs e)
    {

        btn_load.Enabled = false;
        btn_start.Enabled = false;
        btn_next.Enabled = false;
        //Process.Start("cmd.exe", "taskkill / F / im notepad.exe");

    }

    private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (wb2flag)
        {
            wb2flag = false;
            wb2ready = true;
            if (!start)
                btn_load.Enabled = wb2ready;
        }
        else
        {              
            text_edit();
        }
    }

    private void wb2func_create_mail()
    {
        HtmlElementCollection elemcol = webBrowser2.Document.GetElementsByTagName("option");
        foreach (HtmlElement elem in elemcol)
        {
            if (elem.InnerText == mailservice)
                elem.SetAttribute("selected", "selected");
        }
        HtmlElementCollection elemcol2 = webBrowser2.Document.GetElementsByTagName("input");
        foreach (HtmlElement elem in elemcol2)
            if (elem.GetAttribute("name") == "mail")
                elem.SetAttribute("value", pro.username);
        //wb2flag = true;
        //workflag = true;
        webBrowser2.Document.GetElementById("postbut").InvokeMember("click");            
    }


    private void btn_load_Click(object sender, EventArgs e)
    {
        //OpenFileDialogForImportingUserId();
        VPN vpn = new VPN();
        MessageBox.Show(vpn.ConnectVPN(vpn.SetServer(0)).ToString());
        //Process.Start("C:\\Users\\Hossein\\Desktop\\output.bat");
        //MessageBox.Show(Environment.GetEnvironmentVariable("a", EnvironmentVariableTarget.Process));
        //MessageBox.Show(Environment.GetEnvironmentVariable("a", EnvironmentVariableTarget.User));
        //MessageBox.Show(Environment.GetEnvironmentVariable("a", EnvironmentVariableTarget.Machine));


    }


    public void text_edit()
    {
        txt_username.TextChanged += new EventHandler(text_change);
        txt_username.Text = pro.username;
        txt_email.Text = pro.email;

    }

    private void btn_next_Click(object sender, EventArgs e)
    {


    }

    private void btn_refresh_Click(object sender, EventArgs e)
    {            
        webBrowser2.Navigate("https://temp-mail.org/en/option/change/");
    }

    private void text_change(object s , EventArgs e)
    {
        Form2 avelon = new Form2(pro);
        avelon.btn_fill_enabled = true;
    }



}

}

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

在表单2中看不到表单1中的数据的原因似乎是,您没有将属性对象从表单1传递到表单2,因此在表单1中有一个填充了数据的属性对象,但在表单2中,您仍然使用一个新创建的属性对象。只需修改Form2构造函数,使其接受属性参数并从Form1传递它

示例(这在Form2的代码中):

这将创建一个代码,该代码在每次创建新Form2时执行,并要求您传递属性对象来创建它(
new Form2(pro);
in Form1),因此它将Form2的属性对象分配给在Form1上创建其对象时传递的属性对象

还要将属性类公开,以便可以在Form2的构造函数中将其用作参数

希望这对你有帮助


注意:看看你的代码,我看到你正在创建一个全局Form2对象。您应该在btn_start_单击时创建它,然后再显示它,以便正确填充数据(当您显示它时,Form1的属性对象已填充,现在当您创建它时,它未填充)

似乎密码显示良好,因为它是在属性类本身定义的,所以每次您创建该类的新对象时,它将默认设置,直到您更改它

在表单2中看不到表单1中的数据的原因似乎是,您没有将属性对象从表单1传递到表单2,因此在表单1中有一个填充了数据的属性对象,但在表单2中,您仍然使用一个新创建的属性对象。只需修改Form2构造函数,使其接受属性参数并从Form1传递它

示例(这在Form2的代码中):

这将创建一个代码,该代码在每次创建新Form2时执行,并要求您传递属性对象来创建它(
new Form2(pro);
in Form1),因此它将Form2的属性对象分配给在Form1上创建其对象时传递的属性对象

还要将属性类公开,以便可以在Form2的构造函数中将其用作参数

希望这对你有帮助


注意:看看你的代码,我看到你正在创建一个全局Form2对象。在显示之前,您应该在btn_start_单击时创建它,以便正确填充数据(当您显示它时,您的Form1属性对象已填充,现在当您创建它时,它未填充)

Property pro=new Property()创建
属性
类的全新实例(即新对象,如新副本)。它与您在Form1中创建的副本没有关系。如果你想重复使用你已经拥有的副本,那么你需要能够在Form2中引用它。没有更多的背景,很难说什么可能是最有效的方法。(password字段工作的原因是您将其硬编码到Property类中,以便插入到您声明的类的每个实例中)@ADyson-短语“新副本”听起来像是在复制当前实例。这是一个全新的不相关的实例。@Enigmativity在我第一次创建评论之后,我稍微编辑了一下措辞,我希望它更清晰。但无论如何,我指的是原始类声明的新“副本”(即实例),而不是其他现有实例。我只是想用外行的语言来描述正在发生的事情,避免太多的行话。这样,OO编程的新手(我怀疑OP可能是这样)可能更容易将这个概念联系起来。@ADyson你能解释一下如何用Form2构造函数传递属性参数吗?@HosseinShahbodaghkhan首先,你在代码中的什么地方创建Form2()?
property pro=new property()创建
属性
类的全新实例(即新对象,如新副本)。它与您在Form1中创建的副本没有关系。如果你想重复使用你已经拥有的副本,那么你需要能够在Form2中引用它。没有更多的背景,很难说什么可能是最有效的方法。(password字段工作的原因是您将其硬编码到Property类中,以便插入到您声明的类的每个实例中)@ADyson-短语“新副本”听起来像是在复制当前实例。这是一个全新的不相关的实例。@Enigmativity在我第一次创建评论之后,我稍微编辑了一下措辞,我希望它更清晰。但无论如何,我指的是原始类声明的新“副本”(即实例),而不是其他现有实例。我只是想用外行的语言来描述正在发生的事情,避免太多的行话。这样,OO编程的新手(我怀疑OP可能是这样)可能更容易将概念联系起来。@ADyson您能解释一下如何使用Form2构造函数传递属性参数吗?@HosseinShahbodaghkhan首先,代码中的
namespace Bypassing
{
public partial class Form2 : Form
{

    string referal_link;

    Property pro = new Property();

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



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

    private void btn_fill_Click(object sender, EventArgs e)
    {
        signup_fill();
    }

    private void btn_logout_Click(object sender, EventArgs e)
    {           
        HtmlElementCollection elemcol = site.Document.GetElementsByTagName("a");
        foreach (HtmlElement elem in elemcol)
        {
            if (elem.InnerText == " Log out ")
                elem.InvokeMember("click");                
        }
    }

    private void btn_next_link_Click(object sender, EventArgs e)
    {

    }

    public bool btn_fill_enabled
    {
        get { return btn_fill.Enabled; }
        set { btn_fill.Enabled = value; }
    }

    public bool btn_logout_enabled
    {
        get { return btn_logout.Enabled; }
        set { btn_logout.Enabled = value; }
    }

    public bool btn_next_link_enabled
    {
        get { return btn_next_link.Enabled; }
        set { btn_next_link.Enabled = value; }
    }

    private void avelon_site_Completed(object sender, WebBrowserNavigatedEventArgs e)
    {
        Form1 main_win = new Form1();
        main_win.text_edit();
    }
}
namespace BitcoinCloudMiningBypassApp
{

public partial class Form1 : Form
{

    private string mailservice;
    private string userid;
    int idx = 29;

    bool wb1flag = true;
    bool wb2flag = true;
    bool wb1ready = false;
    bool wb2ready = false;
    bool workflag = false;
    bool start = false;
    string filePath;        
    //StreamWriter file2 = new StreamWriter("avelon_users_email.txt", true);
    //StreamWriter file = new StreamWriter("avelon_referal_links.txt", true);        
    Property pro = new Property();

    private void OpenFileDialogForImportingUserId()
    {
        //var fileContent = string.Empty;

        using (OpenFileDialog openFileDialog = new OpenFileDialog())
        {
            openFileDialog.InitialDirectory = "C:\\";
            openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog.FilterIndex = 1;
            openFileDialog.RestoreDirectory = true;

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                //Get the path of specified file
                filePath = openFileDialog.FileName;
                btn_start.Enabled = true;

                ////Read the contents of the file into a stream
                //var fileStream = openFileDialog.OpenFile();

                //using (StreamReader reader = new StreamReader(fileStream))
                //{
                //    fileContent = reader.ReadToEnd();
                //}
            }
        }

    }

    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;
        //MessageBox.Show(avelon_email);
        wb2func_create_mail();
    }

    public Form1()
    {
        InitializeComponent();
        webBrowser2.Navigate("https://temp-mail.org/en/option/change/");

    }


    private void btn_start_Click(object sender, EventArgs e)
    {
        Form2 avelon = new Form2(pro);
        avelon.Show();
        //VPN vpn = new VPN();
        // MessageBox.Show(vpn.ConnectVPN(vpn.SetServer(0)).ToString());
        CreateAvelonUserInform();
        start = true;
        btn_load.Enabled = false;
        btn_start.Enabled = false;            
        avelon.btn_logout_enabled = true;
        btn_refresh.Enabled = false;
    }


    private void Form1_Load(object sender, EventArgs e)
    {

        btn_load.Enabled = false;
        btn_start.Enabled = false;
        btn_next.Enabled = false;
        //Process.Start("cmd.exe", "taskkill / F / im notepad.exe");

    }

    private void webBrowser2_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (wb2flag)
        {
            wb2flag = false;
            wb2ready = true;
            if (!start)
                btn_load.Enabled = wb2ready;
        }
        else
        {              
            text_edit();
        }
    }

    private void wb2func_create_mail()
    {
        HtmlElementCollection elemcol = webBrowser2.Document.GetElementsByTagName("option");
        foreach (HtmlElement elem in elemcol)
        {
            if (elem.InnerText == mailservice)
                elem.SetAttribute("selected", "selected");
        }
        HtmlElementCollection elemcol2 = webBrowser2.Document.GetElementsByTagName("input");
        foreach (HtmlElement elem in elemcol2)
            if (elem.GetAttribute("name") == "mail")
                elem.SetAttribute("value", pro.username);
        //wb2flag = true;
        //workflag = true;
        webBrowser2.Document.GetElementById("postbut").InvokeMember("click");            
    }


    private void btn_load_Click(object sender, EventArgs e)
    {
        //OpenFileDialogForImportingUserId();
        VPN vpn = new VPN();
        MessageBox.Show(vpn.ConnectVPN(vpn.SetServer(0)).ToString());
        //Process.Start("C:\\Users\\Hossein\\Desktop\\output.bat");
        //MessageBox.Show(Environment.GetEnvironmentVariable("a", EnvironmentVariableTarget.Process));
        //MessageBox.Show(Environment.GetEnvironmentVariable("a", EnvironmentVariableTarget.User));
        //MessageBox.Show(Environment.GetEnvironmentVariable("a", EnvironmentVariableTarget.Machine));


    }


    public void text_edit()
    {
        txt_username.TextChanged += new EventHandler(text_change);
        txt_username.Text = pro.username;
        txt_email.Text = pro.email;

    }

    private void btn_next_Click(object sender, EventArgs e)
    {


    }

    private void btn_refresh_Click(object sender, EventArgs e)
    {            
        webBrowser2.Navigate("https://temp-mail.org/en/option/change/");
    }

    private void text_change(object s , EventArgs e)
    {
        Form2 avelon = new Form2(pro);
        avelon.btn_fill_enabled = true;
    }



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