Dzięki za pomoc mam jeszcze jedną zagwozdkę ponieważ mam dostęp do zmiennych z Form1 ale nie zmienią się one automatycznie muszę najpierw wywołać funkcję w Form1 żeby użył nowych wartości. Próbowałem zrobić tak rodzic.przycisk_Click() ale czepia się o to że nie mam argumentów bo w metodzie są dwie object sender, EventArgs e ale nie wiem co napisać w w wywołaniu funkcji w Form2 żeby to zadziałało.
Metodę ShowDialog(); możesz wywoływać z parametrem (a w zasadzie powinieneś). Wywołanie tej metody będzie wówczas wyglądać następująco ShowDialog(this); Wówczas w obiekcie klasy Form2 będziesz mieć dostęp do obiektu klasy Form1 poprzez właściwość Owner:
Form1 form1 = (Form1)form2.Owner;
Nie musisz wówczas dodawać dodatkowego parametru do konstruktora klasy Form2, tj. parametru rodzic (i tutaj przy okazji dodam, że powinieneś używać angielskiego nazewnictwa). 2. Jeśli chcesz przekazywać wartości z Form2 do Form1, to możesz również użyć publicznych właściwości (IMO takie rozwiązanie jest czytelniejsze).
Form2 form2 = new Form2();
if (form2.ShowDialog(this) == DialogResult.OK)
{
MessageBox.Show(form2.Property1);
MessageBox.Show(form2.Property2);
itd.
}
form2.Dispose();
Jeśli chcesz wywołać procedurę obsługi zdarzenia np. Click, to parametry musisz przekazać w taki sposób w jaki przekazujesz je do każdej innej procedury: