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();最初のフォームの新しいインスタンスを作成しますが、代わりに変数を使用して既に初期化されたフォームを使用したいとします。したがって、コンストラクターを介してフォーム インスタンスを 2 番目のフォームに渡し、それをプロパティに格納できます。

最初の形式:

frLeczenie leczenie = new frLeczenie(this);

2 番目のフォーム コンストラクター:

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 に渡し、新しいフォーム 1 を作成しないことです。

于 2013-03-12T22:34:38.443 に答える
0

コードの最後の部分で新しい form1 を作成すると、それはクラスの新しい空のインスタンスになります。クラスまたはフォームの各インスタンスには、独自の変数値があります。特定のクラスのすべてのオブジェクトでこれらの変数を使用および共有する必要がある場合は、それらを静的にします。

于 2013-03-12T22:37:06.537 に答える