Pobranie informacji z formy2 do formy głównej

0

Witam. Chciałbym się nauczyć przesyłania danych między formami, gdyż nigdy tego nie mogłem zrozumieć. Umiem przesłać dane z formy2 do głównej tylko wtedy gdy forma2 zostanie włączona jako pierwsza, inaczej mi nie idzie.

Mam główną formę w której mam textbox i button, buttonem włączam drugą formę, wpisuje w dwa textboxy jakieś ciągi znaków, po czym w drugiej formie naciskam button aby przesłać dane do formy głównej, lecz nic się nie dzieje. W formie 1 ustawiam textbox jako public a w drugiej formie kod wygląda tak

Form1 f1 = new Form1();
f1.textBox11.Text = textBox1.Text;

Gdy użyję tego kodu to nic się nie dzieje, lecz jeżeli dodam jeszcze to : f1.Show(); wtedy odpali się drugi raz forma pierwsza, lecz tekst z formy drugiej zostanie przeniesiony.

Możecie mnie nakierować, nauczyć lub pokazać jak mam po włączeniu drugiej formy, wpisaniu coś w niej, naciśnięciu buttona przenieść dane do formy głównej?.

0

Bo tworzysz NOWĄ formę typu formy głównej. Jeżeli chcesz przekazać z formy 2 do formy głównej coś, to powinieneś przy konstruktorze formy 2 przesłać referencję formy głównej, wtedy z formy 2 masz dostęp do formy głównej:

class Form1 : Form
{
    // ...
}

class Form2 : Form
{
    Form1 form1;

    public Form2(Form1 form1)
    {
         this.form1 = form1;
    }
}

Teraz na formie drugiej możesz zrobić form1.textBox11.Text = this.textBox1.Text;.

0

Aby wywołać formę drugą użyłem tego

            Form2 form2 = new Form2();
            form2.ShowDialog();

lecz absolutnie nie wiem co wpisać tutaj

Form2 form2 = new Form2(-----);

gdyż wyskakuje mi błąd does not contain a constructor that takes 0 arguments

0

Masz teraz konstruktor z parametrem typu Form1, więc wpisz

Form2 form2 = new Form2(this); 

żeby przekazać referencję do aktualnego okna (Form1)

0

Nie bardzo zrozumiałem dlaczego this to konstruktor, może być inny konstruktor niż this?

0

this to nie konstruktor, a referencja klasy, w której wykonuje się aktualny kod, czyli formy głównej. Przekazujesz właśnie formę główną. Równie dobrze można by zrobić tak:

new Form2(Form.ActiveForm); // o ile aktywna jest forma główna

Ale this przekazujemy po to, by mieć pewność co przekazujemy. Przekazując this w formie głównej, przekazujesz samą siebie, czyli obiekt typu Form1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1