Podróż danych między formami

0

Witam. Prosiłbym was o wytłumaczenie używania funkcji do przesyłąnia danych między formami, gdyż nie mogę tego pojąć za nic. Opiszę mój aktualny problem

Mam dwie formy. Pierwsza forma jest otwierana jako pierwsza, drugą formę otwieram za pomocą buttona który znajduję się pierwszej formie, w którym mam zapisany następujący kod

f2 = new Form2();
f2.Show();       "Form2 f2; jest zdeklarowana na początku kodu

Druga forma jest otwarta, w drugiej formie wpisuje jakiś ciąg znaków po czym w pierwszej formie wciskam button z tym oto kodem

textBox1.Text = f2.textBox1.Text;

Tekst z formy drugiej przechodzi na formę pierwszą, lecz gdy chcę przenieść tekst z formy pierwszej na formę drugą to już jest problem

I teraz zaczyna się mój problem, gdyż w ten sam sposób próbuje przesłać dane z pierwszej formy do drugiej i za nic mi to nie wychodzi. Forma druga jest otwarta po formie pierwszej, chyba to ma jakieś znaczenie :/. Czytałem o delegacjach, lecz no nie umiem ich zrozumieć, nie wiem jak to wytłumaczyć :/. Mógłby mi ktoś zademonstrować jak mogę przenieść kod z formy drugiej do formy pierwszej?, będę bardzo wdzięczny !

0

Ja w takich przypadkach najczęściej tworzę plik z danymi z pierwszej formy oraz w drugiej czymś otwieram plik pobieram te dane wpisuje je do textbox'a w 2 formie i usuwam tamten plik. Najprostsze rozwiązanie.

0

Eureka: Obiekt f2 nie ma pojęcia o obiekcie klasy Form1. Możesz to zrobić np przez konstruktor klasy Form2 np:

Form2.cs:

 
        private Form1 form1;

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

        private void button1_Click(object sender, EventArgs e)
        {
            this.form1.textBox1.Text = this.textBox1.text;
        }

Wtedy w Form1:

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(this);
            form2.Show();
        }

Z pewnością będziesz musiał zmienić dostęp do textBox1 z private na public, lub w klasie Form1 stworzyć publiczną metodę zmieniającą tekst w textBox1 np:

Form1.cs:

        public void setText(String text)
        {
            this.textBox1.Text = text;
        }

Wtedy kod w Form2 ma postać:

        private void button1_Click(object sender, EventArgs e)
        {
            this.form1.setText(this.textBox1.Text);
        }
0

Działa, bardzo dziękuje, lecz jeszcze muszę zrozumieć jak to działa

0
kult napisał(a):

Z pewnością będziesz musiał zmienić dostęp do textBox1 z private na public

Nigdy tak się nie powinno robić. To gwałcenie enkapsulacji, SRP, DRY, a przede wszystkim strzelanie sobie w stopę i utrudnianie dalszego pisania aplikacji.

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