0

我有一个“简单”的问题,即从 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;
        }

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

问候,彼得。

4

3 回答 3

0

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

第一种形式:

frLeczenie leczenie = new frLeczenie(this);

第二种形式的构造函数:

public frLeczenie(Form1 formaglowna)
{
    InitializeComponent();

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

public Form1 Formaglowna{ get; set; }

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

textBox1.Text = Formaglowna.wynikImie;
// ...
于 2013-03-12T22:34:11.457 回答
0

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

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

您需要的是将真实的 form1 传递给 form2 而不是创建新的 form 1

于 2013-03-12T22:34:38.443 回答
0

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

于 2013-03-12T22:37:06.537 回答