2012-05-24 12 views
10

Chcę uzyskać dostęp do zmiennych formularza z innego formularza. Klikając przycisk wewnątrz mojego głównego formularza, chcę ustawić moją główną formę jako rodzica, a następnie przywołać inny formularz (formularz potomny), w którym będę uzyskiwał dostęp do zmiennych formularza głównego. Mój moduł obsługi kliknięć jest następujący:Ustaw formularz jako wyjątek dla rzutów rodzica "Kontrola najwyższego poziomu nie może zostać dodana do formantu"

private void btnSystem_Click(object sender, EventArgs e) 
{ 
    Form_EnterPassword EP = new Form_EnterPassword(); 
    EP.Parent = this;  //error: Top-level control cannot be added to a control 
    EP.ShowDialog(); 
} 

Kompiluje dobrze bez żadnych błędów. Jednak po uruchomieniu formularza głównego i kliknięciu przycisku System spowoduje to wyjątek. Robię coś podobnego w innym kodzie (nie moim) za pomocą tego samego kliknięcia przycisku i nie napotykam na błąd (tylko przy ustawianiu głównego formularza jako nadrzędny).

Co robię źle? Czy coś w moim głównym kodzie powoduje to?

+0

Przeczytałem i znalazłem nic, co pomaga. istnieją podobne kody, które mają tę samą deklarację ustawienia rodzica. – CaTx

+0

wyjątek jest generowany tuż po ustawieniu Parent. – CaTx

Odpowiedz

16

Najlepszym sposobem byłoby użycie EP.ShowDialog(this), a następnie użycie właściwości Owner.

+0

Zmieniam na .ParentForm; rzuca mi ten błąd: Właściwość lub indeksowanie "System.Windows.Forms.ContainerControl.ParentForm" nie można przypisać do - jest to tylko do odczytu – CaTx

+3

To prawda. Zapomnij o rodzicach. Po prostu użyj 'Owner'. –

+0

Spróbuję. Dziękuję Ci. – CaTx

10

Potrzebujesz, aby właściwość EP.TopLevel została ustawiona na wartość false. Pozwoli ci to ustawić dla niego rodzica.

Further reading.

W przypadku chcesz tylko uzyskać dostęp do zmiennych i kontroli innej formie, to może można dotrzeć w inny sposób, nie koryta relacji rodzic.

+1

EP.TopLevel = false -> to nie pomaga. – CaTx

+0

dziękuję, że pomogło mi pokazać formularz jako kontrolę w innej formie. – oleksa

+0

Myślę, że to powinno być zaakceptowane jako poprawna odpowiedź. Wykonało to za mnie. Dzięki ;) – Javid

1

OK, widocznie sposób to zrobić to zadzwonić

Form_Child.ShowDialog(this) 

i wtedy mogę zadzwonić

FromParent_aVariable = ((Form_Parent)this.Owner).aVariable; 

lub jeśli mogę zdefiniować aVariable we właściwościach przestrzeni nazw następnie

FromParent_aVariable = NameSpace.Properties.Settings.Default.aVariable; 

Istnieją dwa sposoby.

-1

Pisanie w ten sposób sprawiło, że okno dialogowe pojawi się na środku formularza nadrzędnego.

Form_Child.StartPosition = FormStartPosition.CenterParent; 
    Form_Child.ShowDialog(this); 
Powiązane problemy