【问题标题】:public variables using in the second form以第二种形式使用的公共变量
【发布时间】:2013-03-12 22:30:51
【问题描述】:

我有一个“简单”的问题,即从 FORM1 分配变量(在我的代码 Form1 中)并在 FORM2 中使用这些变量(在我的代码 frLeczenie 中)。于是我开始创建一个公共字符串变量:

        public string wynikImie;
        public string wynikUmaszczenie;
        public string wynikDataUrodzenia;
        public string wynikPlec;
        public string wynikZnakiSzczegolne;
        public string wynikCzyWykastrowane;

我将从 SQL 数据库中分配数据给这些变量:

private void dgZwierze_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            string zapytanie = "SELECT IMIE_ZWIERZECIA, DATA_URODZENIA, PLEC, ZNAKI_SZCZEGOLNE, UMASZCZENIE, CZY_WYKASTROWANE FROM tbZwierze WHERE tbZwierze.IMIE_ZWIERZECIA = '" + wynikImie + "' AND tbZwierze.UMASZCZENIE = '" + wynikUmaszczenie + "'";
            SqlCommand cmdZapytanie = new SqlCommand(zapytanie, cs);
            cs.Open();
            SqlDataReader reader = cmdZapytanie.ExecuteReader();

                if (reader.Read())
                {
                    wynikImie = reader.GetValue(0).ToString();
                    wynikDataUrodzenia = reader.GetValue(1).ToString();
                    wynikPlec = reader.GetValue(2).ToString();
                    wynikZnakiSzczegolne = reader.GetValue(3).ToString();
                    wynikUmaszczenie = reader.GetValue(4).ToString();
                    wynikCzyWykastrowane = reader.GetValue(5).ToString();
                }
            cs.Close();
        }

到现在一切都很好,但是当我打开 FORM2 时出现问题:

private void btnLeczenie_Click(object sender, EventArgs e)
        {
            frLeczenie leczenie = new frLeczenie();
            leczenie.ShowDialog(); 
        }

突然我分配给公共字符串变量的所有数据都丢失了,我无法在 FORM 2 中使用它们:

private void frLeczenie_Load(object sender, EventArgs e)
        {
            Form1 formaglowna = new Form1();
            textBox1.Text = formaglowna.wynikImie;
            textBox2.Text = formaglowna.wynikDataUrodzenia;
            textBox3.Text = formaglowna.wynikPlec;
            textBox4.Text = formaglowna.wynikZnakiSzczegolne;
            textBox5.Text = formaglowna.wynikUmaszczenie;
            textBox6.Text = formaglowna.wynikCzyWykastrowane;
        }

我做错了什么?也许我错过了什么?你能看看这个吗?

问候, 彼得。

【问题讨论】:

  • 它们是 null 还是编译错误?

标签: c# visual-studio variables public


【解决方案1】:

new Form1(); 为您的第一个表单创建一个新实例,但您想使用已经初始化的表单及其变量。因此,您可以通过构造函数将表单实例传递给您的第二个表单并将其存储在属性中:

第一种形式:

frLeczenie leczenie = new frLeczenie(this);

第二种形式的构造函数:

public frLeczenie(Form1 formaglowna)
{
    InitializeComponent();

    this.Formaglowna = formaglowna;
    // ...
}

public Form1 Formaglowna{ get; set; }

现在您可以通过属性访问它们:

textBox1.Text = Formaglowna.wynikImie;
// ...

【讨论】:

  • 谢谢,我明白我在哪里犯了错误。它现在工作正常。问候,彼得。
【解决方案2】:

请注意,您在其dgZwierze_CellContentClick 方法中设置表单实例中的值。但是,在表单 2 中,您正在创建一个从未显示或调用过该方法的新 Form1。所以值是空的。

Form1 formaglowna = new Form1();
textBox1.Text = formaglowna.wynikImie;

你需要的是将真正的form1传递给form2,而不是创建一个新的form 1

【讨论】:

    【解决方案3】:

    当您在代码的最后部分创建新的 form1 时,它是该类的一个新的空白实例。类或表单的每个实例都有自己的变量值。如果您确实需要这些变量在给定类的所有对象上可用和共享,请将它们设为静态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多