Mam główny formularz (nazwijmy go frmHireQuote), który jest dzieckiem głównego formularza MDI (frmMainMDI), który pokazuje inny formularz (frmImportContact) za pośrednictwem ShowDialog () po kliknięciu przycisku.
Gdy użytkownik kliknie „OK” na frmImportContact, chcę przekazać kilka zmiennych łańcuchowych z powrotem do niektórych pól tekstowych na frmHireQuote.
Zauważ, że może istnieć wiele instancji frmHireQuote, to oczywiście ważne, że wrócę do instancji, która wywołała tę instancję frmImportContact.
Jaka jest najlepsza metoda tego?
źródło
Zwykle tworzę statyczną metodę w formularzu / oknie dialogowym, którą mogę wywołać. Zwraca sukces (przycisk OK) lub niepowodzenie, wraz z wartościami, które należy wypełnić.
I na formularzu:
Aby zadzwonić do formularza;
źródło
frm
(i właśnie to zrobiłem, gdy ją przeczytałem) prowadzi do zamieszania ...Znalazłem inny mały problem z tym kodem ... a przynajmniej był problematyczny, gdy próbowałem go zaimplementować.
Przyciski w frmMain nie zwracają kompatybilnej wartości, używając VS2010 dodałem następujące i wszystko zaczęło działać dobrze.
Po dodaniu dwóch wartości przycisków okno dialogowe działało świetnie! Dzięki za przykład, to naprawdę pomogło.
źródło
Po prostu wstawiłem do konstruktora coś przez odniesienie, aby podformularz mógł zmienić swoją wartość, a główna forma mogła uzyskać nowy lub zmodyfikowany obiekt z podformularza.
źródło
Używam MDI całkiem sporo, podoba mi się to bardziej (tam, gdzie można go używać) niż wiele form pływających.
Ale aby czerpać z tego jak najwięcej, musisz poradzić sobie z własnymi wydarzeniami. Ułatwia ci to życie.
Przykład szkieletu.
Posiadaj własne typy przerwań,
Następnie twój własny typ Args
Następnie użyj delegata w przestrzeni nazw, ale poza klasą
Teraz albo ręcznie, albo za pomocą GUI, poproś MDIparent o reakcję na formularze potomne.
Ale dzięki swoim argumentom Owr możesz zredukować to do jednej funkcji. i możesz mieć możliwość przerywania przerwań, co jest dobre do debugowania, ale może być także przydatne na inne sposoby.
Wystarczy, że wszystkie kody zdarzeń mdiparent wskazują na jedną funkcję,
Zwykły mechanizm przełączania zwykle wystarcza, aby przekazać zdarzenia do odpowiednich formularzy.
źródło
Jeśli chcesz przekazać dane
form2
zform1
bez przekazywania jak noweform(sting "data");
Zrób tak w formularzu 1
w formularzu 2 dodaj
Możesz także użyć wartości w
form1
ten sposób, jeśli chcesz coś zamienićform1
tylko w formie 1
źródło
Najpierw musisz zdefiniować atrybut w formularzu 2 (dziecko), zaktualizujesz ten atrybut w formularzu 2, a także z formularza 1 (rodzic):
Wywołanie formularza 2 (dziecko) z formularza 1 (rodzic):
źródło
Zgłaszam zdarzenie w formularzu określającym wartość i subskrybuję to zdarzenie w formularzu (formularzach), które muszą poradzić sobie ze zmianą wartości.
źródło
delegaci są najlepszą opcją do przesyłania danych z jednego formularza do drugiego.
źródło