2

我一直在尝试将项目添加到 Visual Studio .net 应用程序中的 tableLayoutPanel 中,但似乎它们只是在第一个项目位置被替换。

Public rows As Integer = 0
Public CAIList As New List(Of String)
Public p As New Panel()
Public p2 As New Panel()
Public tb As New Label()
Public tb2 As New Label()
Public Sub addCAI()    
If Not String.IsNullOrWhiteSpace(txt_analyst.Text) Then
  CAIList.Add(txt_analyst.Text)
  tb.Text = txt_analyst.Text
  tb2.Text = "OUTDATED"
  p.Controls.Add(tb)
  p2.Controls.Add(tb2)
  p.AutoSize = True
  p2.AutoSize = True
  MainMenu.table_analysts.Controls.Add(p, 0, rows)
  MainMenu.table_analysts.Controls.Add(p2, 1, rows)
  rows = rows + 1
Else
   MessageBox.Show("Cannot add empty Analyst")
End If

起初我认为问题在于“行”一直设置为 0,但后来我对其进行了调试,它增加了。(0,1,2,3....)

它应该工作!这让我疯狂。

4

1 回答 1

1

从帖子中不清楚您的 TableLayoutPanel 中有多少行,但您必须确保这些行存在才能添加这些控件。我认为尝试将控件添加到不存在的单元格时不会引发异常:

If MainMenu.table_analysts.RowStyles.Count - 1 < rows Then
  MainMenu.table_analysts.RowStyles.Add(New RowStyle(SizeType.Percent))
End If

For i As Integer = 0 to rows
  MainMenu.table_analysts.RowStyles(i).Height = 1 / rows
Next

MainMenu.table_analysts.Controls.Add(p, 0, rows)
MainMenu.table_analysts.Controls.Add(p2, 1, rows)
rows = rows + 1

此外,通过处置任何现有控件,确保在添加面板之前单元格是空的。每个单元格只允许一个控件。

正如 Idle_Mind 评论的那样,确保在调用例程时还创建“新”控件:

Public Sub addCAI()
  If Not String.IsNullOrWhiteSpace(txt_analyst.Text) Then
    Dim p As New Panel()
    Dim p2 As New Panel()
    Dim tb As New Label()
    Dim tb2 As New Label()
于 2013-06-03T18:41:51.183 回答