2012-06-09 74 views
2

我希望你能幫助我的麻煩。 我有1個窗體作爲父級MDI(frmParent.vb)並且有2個子窗體(frmChild01.vb & frmChild02.vb)。VB.NET MDI子集其他子屬性

父窗體的代碼如下所示。

Private Sub OpenChild01ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenChild01ToolStripMenuItem.Click 
    Dim child01 As frmChild01 

    child01 = New frmChild01() 
    child01.MdiParent = Me 
    child01.Show() 
End Sub 

Private Sub OpenChild02ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenChild02ToolStripMenuItem.Click 
    Dim child02 As frmChild02 

    child02 = New frmChild02() 
    child02.MdiParent = Me 
    child02.Show() 
End Sub 

frmChild01已經Button1的
frmChild02已經LABEL1

我的問題是我怎麼能設置label1.text當用戶單擊button
在此先感謝...

回答

1

有很多的創造性的方式你可以做到這一點但最終你需要提供Child1和Child2之間的通信通道。

最直接的方式是Pass a ReferencefrmChild02frmChild01。你需要label1是公有的,因此frmChidl02可以訪問它(或者你可以提供一個公共的方法來處理的設置。

這隻能如果你到frmChild02參考當你創建frmChild01。既然你似乎有單獨的按鈕來啓動這些表單,它可能會更復雜,處理這種情況的一種方法是使用事件來處理通信,讓您的Mdi父母監聽/提升子表單中的事件,因此,當您單擊frmChild01中的按鈕讓你的Mdi父母監聽該事件,並引發一個名爲'ButtonClickInForm1'的新事件或類似的東西,讓frmChild02訂閱該事件,如果存在frmChild02的實例,它將響應按鈕clic k並更新它的標籤。

0

您需要檢查ChildForm02是否已經加載。如果不是,則需要先加載它,然後才能設置其標籤的文本屬性。它可能是這個樣子:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 

    If MDIParent1.ChildForm2 Is Nothing OrElse MDIParent1.ChildForm2.Visible = False Then 
     MDIParent1.ChildForm2 = New Form2 
     MDIParent1.ChildForm2.MdiParent = MDIParent1 
     MDIParent1.ChildForm2.Text = "Window " 
     MDIParent1.ChildForm2.Show() 
    End If 
    MDIParent1.ChildForm2.Label1.Text = "your text here" 

End Sub 

還需要在表格的MdiParent宣佈孩子形式公開,這樣就可以解決方案中的任何地方訪問它。

Public ChildForm1 As Form1 
Public ChildForm2 As Form2