Dobrý den, nevím, jestli jsem Váš dotaz či problém pochopil správně, pokud ne, pak mne, prosím, neukamenujte. Předpokládám, že máte Form1 (nebo formulář, ze kterého spouštíte Váš kód, nadefinován jako isMdiContainer=true a ve Vašem formuláři Form3, který předpokládám chcete mít jako MdiChild máte nastaven mdiparent na správný formulář (Form1). Otázkou je nyní, jak ten "Child" formulář otevřete. Buď jej můžete otevřít přímým voláním Form3.show(), nebo, což asi bude pravděpodobnější, vytvoříte instanci formuláře Form3 a tu otevřete. Předpokládám tuto variantu jako pravděpodobnější, protože asi Mdi kontejner používáte proto, že v něm chcete mít více otevřených "Child" formulářů. Takže takové ukázkové otevření (z Form1) by mohlo vypadat třeba takto:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim doc1 As New Form3
doc1.Text = "Prvni instance Form3"
doc1.Show()
Dim doc2 As New Form3
doc2.Text = "Druha instance Form3"
doc2.Show()
Form3.Show()
Form3.Text = "Form3-public"
End Sub
Na zkoušku jsem si otevřel hned 3 stejné "Child" formuláře, aby byl efekt patrný. Přestože jsou (vypadají) úplně stejně, úplně stejné nejsou - zvláště ten poslední. Liší se v tom, že jeho název (Form3) je definován (v projektu) jako Public, takže jeho jmého znám i po vyskočení z předvedené iniciační metody. Na rozdíl od tohoto, u prvních dvou Formů si deklaruji (ale jenom lokálně v metodě) pomocné instanční proměnné typu Form3 (klidně by mohly být pojmenovány i stejně - např. v cyklu) a poté, co Formuláře otevřu tyto jejich názvy okamžitě zapomenu (ukončením metody Load) No a proč tento "dlouhý" úvod? Bohužel, ve svém textu neuvádíte, jak ty ChildFormy otevíráte. Ale v úvodu tam přiřazujete do proměnné doc právě aktivní ChildForm, ale dál s touto proměnnou již nepracujete!? Když si to zase pro názornost převedu do svého příkladu, dám si na ten svůj Form1 tlačítko a 3 textboxy, mohu pro tlačítko napsat následující_
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not IsNothing(Me.ActiveMdiChild) Then
Dim doc As Form3 = Me.ActiveMdiChild
doc.RichTextBox1.Text &= Me.TextBox1.Text
doc.RichTextBox1.Text &= vbCrLf & Me.TextBox2.Text
doc.RichTextBox1.Text &= vbCrLf & Me.TextBox3.Text
Form3.RichTextBox1.Text &= vbCrLf & "---------------" & vbCrLf
End If
A pokud si to vyzkoušíte, velice rychle zjistíte ten rozdíl. Funguje to velice jednoduše: Mám (v tomto případě) ve svém MdiContaineru 3 ChildFormy. Nejprve testnu, je-li některý z nich aktivní a pokud ano, pak si odkaz na něj uložím do proměnné doc (která má typ Form3, ale s mým otevřeným Form3 kromě vzhledu nemá nic společného). No a teď zapíšu hodnotu svých textboxů do RichtextBox1 na tom aktivním formuláři(nevím, který to je /neznám jeho jméno/, ale před chvílí jsem si odkaz na něj uložil do proměnné doc). Ten poslední zápis se ale přímo odvolává na Formulář s názvem Form3, a jelikož je tento název definován jako globální a stejnojmenný formulář jsem si taky otevřel, tak píšu natvrdo do něj - ať mám jinak jako aktivní vybrán kterýkoliv z nich.
|