2014-09-19 41 views
0

我知道,有很多與此有關的問題,但我仍然找不到一個可行的解決方案。另一種形式的VB.NET呼叫子

通常情況下,它的工作是這樣的:一個表單創建另一種形式的實例中是這樣的容器:

Dim PolInstIn As New SubForm1 

Private Sub LoadDetail() 

    PolInstIn.TopLevel = False 
    PolInstIn.Name = "Sub From" 
    PolInstIn.FormBorderStyle = Windows.Forms.FormBorderStyle.None 
    PolInstIn.Dock = DockStyle.Fill 

    Me.GroupBox6.Controls.Add(PolInstIn) 
    PolInstIn.Show() 

End Sub 

然後可以很容易地從子窗體像這樣調用公用Sub:

Call PolInstIn.MyPublicSubInSubForm1() 

但是,在這種情況下,這對我不起作用。當我運行MyPublicSubInSubForm1()時,它不會拋出任何錯誤,但不會執行任何操作。如果我向SubForm1文本框寫入一個值並將其讀回,它會讀取,但我沒有在屏幕上看到它,所以我懷疑它是寫入其他一些實例的實例。

我懷疑這是因爲我的父窗體也是一個實例的窗體創建像SubForm1非常類似的方式。基本上,ParentForm是一個加載到tabPage中的表單,SubForm1是一個加載到ParentForm中的模塊。它可以存在許多副本(選項卡)。

你能指出任何簡單的解決方案嗎?

問候,

Libor的

回答

0

我看到這個問題有很多意見,所以這裏是一個答案。

1)沒有兒童形式的視覺反應(只有結果) - 如果我創建了多於1個形式的實例,可能會發生這種情況。這個例子僅僅是一個例子,但是如果用這種方式(意外地)使用它,它可能會導致每次都會重新定義一個子表單(以及隨後出現的所描述的症狀)。實際上,我將表單加載從加載數據分割到表單中(由該表單中的公共子部分完成)。

2)如果你也想一回的引用(即父網格狀),定義一個公共ParentFormGrid爲GridName(注意ParentForm是保留名稱)和加載子窗體,設置

PollInstIn.ParentFormGrid = Me 

這樣,您可以一直訪問父窗體,即當您將更改保存到以子窗體編輯的行中時重新加載網格。

-2
Dim PolInstIn As New SubForm1 

Private Sub LoadDetail() 

    PolInstIn.Name = "Sub From" 
    PolInstIn.Show() 
    PolInstIn.TopLevel = False 
    PolInstIn.FormBorderStyle = Windows.Forms.FormBorderStyle.None 
    PolInstIn.Dock = DockStyle.Fill 
    PolInstIn.Update() 
    PolInstIn.Refresh() 

    Me.GroupBox6.Controls.Add(PolInstIn) 


End Sub 
-1

使Private Sub LoadDetail()到公衆:

Public Sub LoadDetail() 

它在我的項目上工作。希望它是你想要的

+0

這將允許在窗體的已知實例中調用LoadDetail子。上面的麻煩是定義/發現了一個實例。我通過在子表單中定義一個父表單的Public對象來解決這個問題,並且在創建子表單的實例時,我將父表單的一個實例分配給該對象。我會回答這個問題(我應該這樣做......) – 2016-04-25 11:48:56

+0

好消息。我會用你的提示改進我的代碼。多謝你們 – 2016-04-26 00:10:25