Vb.net 将堆叠的项目添加到visual studio.net中的表布局面板

Vb.net 将堆叠的项目添加到visual studio.net中的表布局面板,vb.net,winforms,tablelayoutpanel,Vb.net,Winforms,Tablelayoutpanel,我一直试图在VisualStudio.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 ad

我一直试图在VisualStudio.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…)


它应该有用!!!这让我抓狂。

从帖子中不清楚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

代码中不清楚……但不能将相同的面板添加到不同的行中。他们将被从上一个位置移到新位置。如果你想拥有多组面板,那么你需要为每一行创建一个新的面板和相关控件。太棒了!这是可行的,但我之所以在前面使用公共变量是因为我需要刷新分析师的状态,这是通过使用CAIList中的列表重新创建行,并使用streamReader从txt文件中获取第2列的文本来完成的。这是一种魅力,但只有当我能够从潜艇外部呼叫控制装置时,它才起作用。它说我仍然不能,因为我的声誉(低于15岁)。谢谢@我明白了。它没有说明任何关于声誉限制的内容,因此当您单击“接受”时,您应该得到2分。希望有帮助。
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()