Dostęp do danych z innego forma

0

Witam
Mam dwa formy. Jeden nazwijmy go Form1 i drugi Form2. Na Form1 mam TextBoxa, z którego chce pobierać dane do Form2.
Żeby to zrobić najprostszym i najszybszym sposobem przestawiłem sobie w Formie 1 właściwość TextBoxa z private na public.
Następnie w Formie 2 dodałem taki kawałek kodu:

private Form1 otherForm = new Form1();
        private void Button5_Click(object sender, EventArgs e)
        {
       
            MessageBox.Show(otherForm.TextBox1.Text);
        }

I niestety po otwarciu Forma 2 w MessageBoxie widzę pustkę, mimo że wpisałem jakąś wartość do TextBoxa.
Ktoś wie w czym leży problem ?

0

jasne, nie przekazujesz aktualnej formy tylko tworzysz nowa.

0

Jeżeli potrzebujesz z jednej formy dobierać się do kontrolek drugiej, to coś źle przemyślałeś. To nie Delphi.

1

Najprościej: Dodaj sobie do konstruktora Form2 referencję do Form1, ot tak:

public Form2(Form1 form)
{}

A później odwołuj się do textboxa za pomocą tej referencji:

form.TextBox1.Text = "dsf";

To nie Delphi.

A co, w Delphi konstrukcja "Form1 otherForm = new Form1();" pozwoli odwoływać się do pól wszystkich Form1? Jakiś Delphi-programista mógłby mi to wytłumaczyć? ;)

0

Nie ma to jak programowanie liniowe :/

Niby po co odwoływać się z pól jednego forma do innego bezpośrednio?

0

Na Form1 mam TextBoxa, z którego chce pobierać dane do Form2.

Jeżeli Form1 potrzebny Ci tylko i wyłącznie do pobrania danych w jednej chwili, a dalej jest juz niepotrzebne to wywołuj je tylko w określonym czasie, i jako okno modalne, a po wszystkim zabij.

        string dane;
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2_pobranie_danych = new Form2(); // nowa instancja Form2
            form2_pobranie_danych.ShowDialog(); // okno modalne

//musisz tez ustalic accept button na Form2 na przycisk ktory będzie pełnił //fukncje OK/Dalej. I dla tegoż przycisku ustalasz DialogResult = OK
            if (form2_pobranie_danych.DialogResult == DialogResult.OK)
            {
                dane = form2_pobranie_danych.textBox1.Text;
            }
            form2_pobranie_danych.Dispose();

        }
0

To nie Delphi.

A co, w Delphi konstrukcja "Form1 otherForm = new Form1();" pozwoli odwoływać się do pól wszystkich Form1? Jakiś Delphi-programista mógłby mi to wytłumaczyć? ;)
</quote>

Nie, ale wystarczy dodać

uses Unit2;

i mamy dostęp do Form2. Zresztą wystarczy od razu w kodzie napisać "Form2.CośTam" i środowisko doda powyższą deklarację automatycznie.
W C# (czy raczej: w Windows Forms) odwołanie się do innej formy jest wyraźnie trudniejsze, co powinno zachęcać do takiego projektowania aplikacji, by takich bezpośrednich odwołań unikać.

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