2013-04-08 22 views
5

我在vb.net中有以下代碼寫在一個按鈕中。vb.net指的是通過新程序創建的表單

dim x as new frm_raw_infosheet 

無論何時點擊按鈕,程序確實會創建一個我想要的窗體的新實例。

我的問題是,我怎麼能指出這些新創建的形式每一個?例如, ,我點擊了按鈕3次,我將如何以編程方式隱藏用按鈕創建的第二個窗體?

我試圖

x.name = "Form" & incrementingvariable 

不過,我不是很確定我要如何來引用它。

爲了使我的問題更加清晰,讓我們說incrementingvariable包含2

incrementingvariable = 2 

X現在包含名爲 「窗體2」

然而,這會返回一個錯誤

Form2.enabled = false 

數我不能參考Form2,因爲.Net說「Form2」不存在!

編輯

我知道它已經有一段時間,因爲我問這個,但這裏是一個更新

在列表框是我使用Listbox1.items.add(x.Name)存儲各種形式的文字名稱。

如何集合中調用一個實例呢?假設我想讓列表中的表單可見?

回答

1

我指的是編輯的問題:不是添加的形式名稱列表框,你可以添加表單對象本身:如果您ListBox的DisplayMember屬性設置爲名稱

Listbox1.Items.Add(x) 

,表單的名稱將顯示在列表框中(與以前一樣)。
現在你可以直接通過ListBox的項目收集和調用方法來訪問他們的表單對象:

DirectCast(ListBox1.Items(2), Form).Enabled = False 

這個例子訪問第三種形式在列表框中(當然你要確保你不要訪問不存在的索引; Count屬性在這方面很有幫助)。
由於項目是以對象形式存儲的,因此必須先將它們轉換爲Form對象,然後才能訪問Form類中定義的成員。

+0

非常感謝你。 – 2013-11-30 16:04:54

3

這取決於你怎麼想你的程序工作。

如果你只打算有你可以保存參考由new在持久性變量返回的任何時間,例如打開窗體的一個實例一個實例變量。然後,您可以參考舊的表單,並在稍後關閉它。

如果你需要保持不止一種形式的軌道,那麼你可以節省new集合中返回的引用,這也可能是一個實例變量。

+0

感謝您花時間回答Marcus!到底如何聲明一個實例變量thoug?你將如何參考它?我的意思是,假設我創建了這個實例變量,我將如何更改它的文本屬性? 。當我輸入一個不存在的變量時,Net的intellisense會啓動。 – 2013-04-10 09:02:38

+0

嗨!我對這個問題進行了編輯。 – 2013-11-29 08:50:24