Problem na pierwszy rzut oka wydaje się banalny. Mam formatkę Form2, której właścicielem jest Form1 (wywołanie przez ShowDialog). Chciałbym, aby przy zamykaniu Form2 przekazywała do swojego właściciela kilka parametrów. Zacząłem standardowo dodając do konstruktora Form2 owe parametry poprzedzone "ref" coby przy tworzeniu formy przekazywane były przez referencje a nie wartości.
I tu zaczynają się schody. Bowiem przekazany w ten sposób SerialPort jak najbardziej działa i wszystko jest ok, ale integer działać nie chce, tj. wszelkie modyfikacje jego wartości przez Form2 nie są po jej zamknięciu widoczne przez Form1. I nie ma tu znaczenia sposób deklarowania tego integera w Form1 - nie działa zarówno dla private jak i dla public.
Póki co znalazłem trzy różne rozwiązania tego problemu i wszystkie wydają mi się kiepskie. Pierwsze polega na tym, żeby nie zamykać Form2, tylko ją ukrywać (stosując Hide) i z poziomu Form1 pobierać sobie dane (np. this.zmienna=Form2.zmienna). Rozwiązanie nie do przyjęcia, bo Form2 trzeba zamykać z poziomu formy głównej, a to czyni ją mało uniwersalną.
Druga metoda, znaleziona tu i tu, polega na przekazaniu do Form2 dostępu do całej (sick!) Form1. To czyni naszą Form2 całkowicie nieuniwersalną, bo przecież w konstruktorze tej formy trzeba definiować formę, do której uzyskujemy dostęp, a poza tym parametry, które chcemy w niej zmieniać, w nowym programie na 99% będą się inaczej nazywać i w zasadzie trzeba modyfikować połowę kodu Form2.
Metoda trzecia, znaleziona tutaj, polega na użyciu dodatkowej klasy pośredniczącej, w której byłyby przechowywane wymieniane pomiędzy formami parametry. Ten sposób też za bardzo mi nie odpowiada, choć jest najbardziej uniwersalny.
Czy da się w jakiś prosty sposób przekazać przy wywoływaniu Form2 referencje do obiektów na Form1? I dlaczego "ref" działa dla parametru typu SerialPort, ale nie działa dla typu integer?
I tu zaczynają się schody. Bowiem przekazany w ten sposób SerialPort jak najbardziej działa i wszystko jest ok, ale integer działać nie chce, tj. wszelkie modyfikacje jego wartości przez Form2 nie są po jej zamknięciu widoczne przez Form1. I nie ma tu znaczenia sposób deklarowania tego integera w Form1 - nie działa zarówno dla private jak i dla public.
Póki co znalazłem trzy różne rozwiązania tego problemu i wszystkie wydają mi się kiepskie. Pierwsze polega na tym, żeby nie zamykać Form2, tylko ją ukrywać (stosując Hide) i z poziomu Form1 pobierać sobie dane (np. this.zmienna=Form2.zmienna). Rozwiązanie nie do przyjęcia, bo Form2 trzeba zamykać z poziomu formy głównej, a to czyni ją mało uniwersalną.
Druga metoda, znaleziona tu i tu, polega na przekazaniu do Form2 dostępu do całej (sick!) Form1. To czyni naszą Form2 całkowicie nieuniwersalną, bo przecież w konstruktorze tej formy trzeba definiować formę, do której uzyskujemy dostęp, a poza tym parametry, które chcemy w niej zmieniać, w nowym programie na 99% będą się inaczej nazywać i w zasadzie trzeba modyfikować połowę kodu Form2.
Metoda trzecia, znaleziona tutaj, polega na użyciu dodatkowej klasy pośredniczącej, w której byłyby przechowywane wymieniane pomiędzy formami parametry. Ten sposób też za bardzo mi nie odpowiada, choć jest najbardziej uniwersalny.
Czy da się w jakiś prosty sposób przekazać przy wywoływaniu Form2 referencje do obiektów na Form1? I dlaczego "ref" działa dla parametru typu SerialPort, ale nie działa dla typu integer?