vb.net - 意外的 TableLayoutPanel 行为
问题描述
嗨,自定义控件中的一些嵌套表格布局面板存在一些问题 我在表格布局面板中的表格布局面板中有一个表格布局面板 我知道很疯狂,但它保持统一和有序
自定义控件由 2 个表格布局面板组成,它们放置在表格的表格布局面板中并在我的主要表单的预览区域中。
在设计时设置它们可以正常工作,但是动态地将具有 1 行 2 列的最顶层的添加/删除到它下面的只有 1 列和 x 行的行中似乎打破了我正在追逐的自动调整大小的行为。
所以我希望单元格和行根据本例标签中的内容自动调整大小,但仍保持整洁有序的布局
控件层次结构中的任何地方都没有停靠,只是在这里和那里锚定这是我在
“ https://i.stack.imgur.com/vRfhE.png ”下面添加表格布局面板的代码
Private Sub AddControl(ByRef Counter As Counter)
Dim Gpanel As New TableLayoutPanel
Dim tlabel As New Label
Dim clabel As New Label
Dim pad As Integer = Counter.Cpad
TLPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink
Gpanel.AutoSizeMode = AutoSizeMode.GrowAndShrink
Gpanel.AutoSize = True
Gpanel.GrowStyle = TableLayoutPanelGrowStyle.AddRows
Gpanel.BorderStyle = BorderStyle.FixedSingle
Gpanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset
TLPanel.BorderStyle = BorderStyle.FixedSingle
Gpanel.Dock = DockStyle.None
Gpanel.Padding = New Padding(0)
Gpanel.Anchor = AnchorStyles.Top Or AnchorStyles.Left
Gpanel.BackColor = Color.Transparent
Gpanel.RowCount = 1
Gpanel.ColumnCount = 2
Gpanel.RowStyles.Add(New RowStyle(SizeType.AutoSize))
Gpanel.ColumnStyles.Add(New ColumnStyle(SizeType.AutoSize))
Gpanel.ColumnStyles.Add(New ColumnStyle(SizeType.AutoSize))
tlabel.Dock = DockStyle.None
clabel.Dock = DockStyle.None
tlabel.GetPreferredSize(Size.Empty)
clabel.GetPreferredSize(Size.Empty)
tlabel.Text = Counter.Clabel
clabel.Text = Counter.Ccount.ToString
tlabel.Padding = New Padding(pad)
clabel.Padding = New Padding(pad)
tlabel.Anchor = AnchorStyles.None
clabel.Anchor = AnchorStyles.None
tlabel.ForeColor = Color.FromName(Counter.Clcolor)
clabel.ForeColor = Color.FromName(Counter.Ccolor)
Dim fontstyle As New FontStyle
fontstyle = Counter.ClfontStyle
tlabel.Font = New Font(Counter.Clfont, Counter.Clfontsize, fontstyle)
fontstyle = Counter.CcfontStyle
clabel.Font = New Font(Counter.Ccfont, Counter.Ccfontsize, fontstyle)
Gpanel.Controls.Add(tlabel, 0, 0)
Gpanel.Controls.Add(clabel, 1, 0)
TLPanel.Controls.Add(Gpanel, 0, Counter.ID)
TLPanel.RowCount += 1
TLPanel.RowStyles.Add(New RowStyle(SizeType.AutoSize))
Dim Styles As TableLayoutRowStyleCollection = TLPanel.RowStyles
Dim Cstyles As TableLayoutColumnStyleCollection = Gpanel.ColumnStyles
Gpanel.RowStyles.Item(0) = New RowStyle(SizeType.AutoSize)
TLPanel.ColumnStyles.Item(0) = New ColumnStyle(SizeType.AutoSize)
For i = 0 To Cstyles.Count - 1
Cstyles.Item(i) = New ColumnStyle(SizeType.AutoSize)
Next
For i = 0 To Styles.Count - 1
Styles.Item(i) = New RowStyle(SizeType.AutoSize)
Next
TLPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset
AutoSize = True
AutoSizeMode = AutoSizeMode.GrowAndShrink
End Sub
'
解决方案
推荐阅读
- java - RabbitMQ 在 YAML 文件中配置队列监听器
- swift - 如何让自动布局约束依赖于兄弟视图?
- angular - 为什么组件与硬编码字符串的属性绑定不断出现未定义?
- raku - 可以对无符号变量或常量进行插值吗?
- java - 是否有与 python 的 dict.items()/dict.values()/dict.keys() 等效的 java?
- javascript - 我应该使用 Promise.All 而不是 async.each 吗?
- javascript - 可以溢出的元素:滚动气泡到文档吗?
- python - html文件未正确复制
- node.js - $match 在 mongodb 中查询不同的值
- php - PHP - Unicode 字符无法在控制台中正确显示