2013-05-09 42 views
1

我需要循環顯示位於面板內的表單的文本框。我試圖做這樣的....Form.Panel上的VB.Net Form DirectCast

For Each Cntrl As Control In DirectCast(Me.Controls(PanelName), Panel).Controls 

next 

我之所以需要將面板的名字喂到循環是因爲我有一個存在於兩個不同的TabPages兩個面板。每個TabPage上都有一個按鈕,它們執行相同的功能,但面板和文本框具有不同的名稱。我有一個處理TabPage按鈕點擊的函數內部的循環,因此我需要循環指向右側的面板。

「PanelName」與目標面板的名稱相匹配,面板爲System.Windows.Form.Panel。

我得到「對象引用未設置爲對象的實例」。信息。

這不可能嗎?

+0

也許是一個愚蠢的問題,但你確定當你這樣做時(A)面板沒有被刪除或重命名,並且(B)InitializeComponent()已被調用? – 2013-05-09 21:21:34

回答

2

無需投:

For Each Cntrl As Control In PanelName.Controls 

Next 

如果你已經是面板的名稱,而不是控制基準,那麼你至少需要知道的TabPage具有面板:

For Each ctrl As Control In TabControl1.TabPages(1).Controls("panel1").Controls 

Next 

或者,你可以使用:

Me.Controls.Find(PanelName, True) 

按名稱返回面板,而搜索子控件遞歸地。

+0

謝謝LarsTech。這是我需要的,但是我描述這種情況的工作很糟糕。我編輯了我的問題,希望它能更好地解釋它。 – JoeB 2013-05-09 21:34:34

+0

@JoeB這些面板是動態創建的嗎?在您發佈的代碼中,Me.Controls將不起作用,因爲面板位於TabPage.Controls集合中。 – LarsTech 2013-05-09 21:37:06

+0

謝謝LarsTech。 .Find幫助我完成了它。 – JoeB 2013-05-10 01:56:22