【发布时间】:2013-11-18 17:22:37
【问题描述】:
添加工作正常
Private Sub AddColumnToTableLayout()
Me.m_TblLyBtnHost.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, (100 / m_TblLyBtnHost.ColumnCount)))
For iColumnStyle As Integer = 0 To Me.m_TblLyBtnHost.ColumnStyles.Count - 1
Me.m_TblLyBtnHost.ColumnStyles.Item(iColumnStyle).SizeType = SizeType.Percent
Me.m_TblLyBtnHost.ColumnStyles.Item(iColumnStyle).Width = 100 / Me.m_TblLyBtnHost.ColumnCount
Next
'For iColumns As Integer = 0 To m_TblLyBtnHost.ColumnCount - 1
' Me.m_TblLyBtnHost.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, (100 / m_TblLyBtnHost.ColumnCount)))
'Next
'Insert buttons for each of the new row ends
For iRowIndex As Integer = 0 To Me.m_TblLyBtnHost.RowCount - 1
m_btnMy = New MyButton.MyButton
Me.SetDefaultsOnMyButtonMyButton(m_btnMy, Me.m_TblLyBtnHost.ColumnCount, iRowIndex)
Me.m_TblLyBtnHost.Controls.Add(m_btnMy, Me.m_TblLyBtnHost.ColumnCount, iRowIndex)
Next
End Sub
MyButton.MyButton 在 UserControl 的类中声明为
Friend WithEvents m_btnMy As MyButton.MyButton
但删除功能不是
Private Sub RemoveColumnFromTableLayout()
For iRowIndex As Integer = 0 To Me.m_TblLyBtnHost.RowCount - 1
Dim Ctrl As MyButton.MyButton = Me.m_TblLyBtnHost.GetControlFromPosition(iRowIndex, Me.m_TblLyBtnHost.ColumnCount - 1)
Me.m_TblLyBtnHost.Controls.Remove(Ctrl)
Next
Me.m_TblLyBtnHost.ColumnStyles.RemoveAt(Me.m_TblLyBtnHost.ColumnCount - 1)
For iColumnIndex As Integer = 0 To Me.m_TblLyBtnHost.ColumnStyles.Count - 1
Me.m_TblLyBtnHost.ColumnStyles.Item(iColumnIndex).Width = 100 / Me.m_TblLyBtnHost.ColumnCount
Next
End Sub
在逐步执行 RemoveColumnFromTableLayout() 时,我注意到 GetControlFromPosition 返回“Nothing”。我从一个 2x2 矩阵开始,添加一列后,我正确地拥有了一个带按钮的 2x3 矩阵。删除后,我不正确地设置了相同按钮集的 3x2 矩阵。在我意识到 GetControl 返回“Nothing”之前,我尝试在控件上使用 dispose。
感谢您的帮助。
【问题讨论】:
-
这就是问题所在 GetControlFromPosition 没有像我们想象的那样工作。添加另一个函数,该函数逐步遍历所有单元格,查看每个单元格。查看解决方案
-
如果要删除所有控件可以使用
Me.m_TblLyBtnHost.Controls.Clear();或者,如果您想更有选择性(选择要删除的某些控件),您可以遍历所有包含的控件(`Me.m_TblLyBtnHost.Controls)。 -
否 只是最后一列或最后一行。除了 Idle_Mind 之外的任何东西都抓住了我的错误。我正朝着我认为当之无愧的愤怒前进。 :)
-
好的。我对 TableLayoutPanel 没有太多经验,但我很好奇你没有得到任何答案,这就是我评论的东西。很高兴你得到了一些帮助; +1 为 Idle_Mind 提供现场解决方案并写出如此清晰详细的答案。