2017-09-20 55 views
1

我有3個控件,由同一行上的標籤,列表框和文本框組成。在另一行上,我有3種不同的控件,它們是標籤,列表框和文本框。我想把它們放到這樣的三維數組中:是否可以使用不同的類型創建多維數組?

Dim multiArray() As Object = { {Lane1Label, ListBox1, TextBox1}, 
    {Lane2Label, ListBox2, TextBox2} } 

但它不讓我這樣做。有沒有辦法?

+1

當然,創建一個類來保存控件,然後把它們放在一個列表中... – Codexer

+0

我建議你使用'DataTable'而不是 – SSS

+1

請注意,在你發佈的代碼中,你聲明瞭一維數組,並試圖給它分配一個2維數組。要聲明一個二維數組,請使用'Dim multiArray(,)As Object'。或者,因爲這些都是控件,所以使用'Dim multiArray(,)As Control'可能會更好。 – Blackwood

回答

0

只是這樣做:

Dim multiArray(,) As Object = _ 
{ _ 
    {Lane1Label, ListBox1, TextBox1}, _ 
    {Lane2Label, ListBox2, TextBox2} _ 
} 

注意,在二維數組的聲明。

+0

我很想知道爲什麼反對票 - 這直接回答了這個問題。 – Enigmativity

+0

因爲這是不好的編碼習慣。你可以結束任何元素中的任何類型的對象。您應該使用強類型來定義可以存儲哪些類型的對象。 –

+0

對不起,但是儘可能多的經驗,我不是故意「教奶奶如何吸雞蛋」:) –

3

使一個類(甚至自定義或用戶控制)來包含的控制各行:

Public Class ControlLine 
    Public Property Lane As Label 
    Public Property List As ListBox 
    Public Property Text As TextBox 
End Class 

然後創建這些對象的一維陣列(或通常甚至更好:一個List(Of ControlLine))和放在這裏您的項目:

Dim lines() As ControlLine = { 
    New ControlLine With { Lane = LaneLabel1, List = ListBox1, Text = TextBox1}, 
    New ControlLine With { Lane = LaneLabel2, List = ListBox2, Text = TextBox2} 
} 

這是好得多因爲你的數組中的項目仍然強類型的,良好的編譯時檢查,並對於像智能感知IDE支持。最近版本的Visual Studio也可以通過元組完成。

再次,還可以考慮將其進一步抽象爲自定義或用戶控件,您可以使用一個簡單的構造函數調用來創建整個集合,將一個控件放置在窗體上並使整個集合正確排列,甚至考慮數據綁定這些ControlLines到像FlowLayoutPanel這樣的容器,而不是自己管理所有的控件和數組。

相關問題