2013-11-27 12 views
0

我使用tablelayout面板試圖輸出二維數組的形式,但是當我跑我寫這樣做的代碼,表格顯示什麼(儘管沒有錯誤實際上是在運行時拋出),所以我不確定爲什麼這不起作用?對外輸出二維數組形成使用TableLayout面板

這裏是我的代碼:

Sub OutputUsingTableLayoutPanel(ByRef arrtruthtable(,) As String) 
    Dim i As Integer 
    Dim j As Integer 
    Dim k As Integer 
    Dim l As Integer 
    Dim TableRowsToAdd As Integer = itruthtablerows - 1 
    Dim TableColumnsToAdd As Integer = itruthtablecolumns - 1 
    Dim NewLabel As New Label() 

    TableLayoutPanel1.RowStyles.Add(New RowStyle(SizeType.AutoSize)) 
    TableLayoutPanel1.ColumnStyles.Add(New ColumnStyle(SizeType.AutoSize)) 

    Do Until i = TableColumnsToAdd 
     TableLayoutPanel1.ColumnCount += 1 
     i += 1 
    Loop 

    Do Until j = TableRowsToAdd 
     TableLayoutPanel1.RowCount += 1 
     j += 1 
    Loop 

    Do Until k = TableLayoutPanel1.ColumnCount 
     Do Until l = TableLayoutPanel1.RowCount 
      TableLayoutPanel1.Controls.Add(NewLabel, k, l) 
      NewLabel.Name = "lbl" & k & l 
      NewLabel.Text = arrtruthtable(k, l) 
      l += 1 
     Loop 
     k += 1 
     l = 0 
    Loop 

End Sub 

任何幫助或想法,爲什麼這不工作,將不勝感激!

+1

很多事情錯在這裏,將同一標籤應用到多個細胞肯定將無法工作。只是不要這樣做,使用ListView與View = Details或DataGridView。 –

+0

只是順便說一句,但沒有必要在'arrtruthtable'傳遞中的ByRef –

回答

1

有幾件事情在你的代碼需要考慮:

ColumnCountRowCount是,你可以直接操縱整數性能。

你應該申報NewLabel內環內,使得被添加每一個都是一個新的對象。

你應該設置的NewLabel屬性將其添加到之前的TableLayoutPanel中

For循環,對於這種類型的迭代,是更直觀,更易於閱讀。

2維數組索引按行,列,但在TableLayoutPanel中使用列,行

當你需要訪問多數民衆贊成被傳遞到您的子程序的數組,你可以得到各個尺寸的長度,而不是依靠一個全局變量。

這裏的一些修改代碼來看看:

Dim test(,) As String = {{"A", "A1"}, {"B", "B1"}, {"C", "C1"}} 
    OutputUsingTableLayoutPanel(test) 

Sub OutputUsingTableLayoutPanel(ByRef arrtruthtable(,) As String) 

    Dim TableRowsToAdd As Integer = arrtruthtable.GetLength(0) 
    Dim TableColumnsToAdd As Integer = arrtruthtable.GetLength(1) 

    TableLayoutPanel1.RowStyles.Add(New RowStyle(SizeType.AutoSize)) 
    TableLayoutPanel1.ColumnStyles.Add(New ColumnStyle(SizeType.AutoSize)) 
    TableLayoutPanel1.ColumnCount = TableColumnsToAdd 
    TableLayoutPanel1.RowCount = TableRowsToAdd 

    For k = 0 To TableColumnsToAdd - 1 
     For l = 0 To TableRowsToAdd - 1 
      Dim NewLabel As New Label() 
      NewLabel.Name = "lbl" & k & l 
      NewLabel.Text = arrtruthtable(l, k) 
      TableLayoutPanel1.Controls.Add(NewLabel, k, l) 
     Next 
    Next 

End Sub 

這裏有一個簡單的方法來獲得,甚至格式化:

TableLayoutPanel1.ColumnCount = TableColumnsToAdd 
    TableLayoutPanel1.RowCount = TableRowsToAdd 
    TableLayoutPanel1.RowStyles.Clear() 
    For I = 1 To TableRowsToAdd 
     TableLayoutPanel1.RowStyles.Add(New RowStyle(SizeType.Percent, 100 \ TableRowsToAdd)) 
    Next 
    TableLayoutPanel1.ColumnStyles.Clear() 
    For I = 1 To TableColumnsToAdd 
     TableLayoutPanel1.ColumnStyles.Add(New ColumnStyle(SizeType.Percent, 100 \ TableColumnsToAdd)) 
    Next 
+0

二維數組並不一定意味着數組有2列? –

+0

對不起得到了我的術語混合起來有點 – tinstaafl

+0

很抱歉,如果我失去了一些東西很明顯這裏,但是當代碼運行它通過內環和外環兩個工作的正確的次數,但後來最終輸出到控制檯似乎只顯示2行和2列(這是表單設計中定義的),就好像額外的列/行不是在運行時創建的那樣? –