0
我的问题很简单。我有一个TableLayoutPanel
,其中有不同的行,每个包含控件。防止自动调整大小的TableLayoutPanel行在内容不可见时崩溃
我希望TableLayoutPanel
根据其内容自动调整自身大小,除非控件的Visible
属性设置为False
。
发生这种情况时,我想保留该行所在的空格。
当前,当控件的Visible
属性设置为False
时,它所在的行折叠。如果我检查调试器,我可以看到控件的Height
仍然是24
,而不是0
。
我一直在玩弄不同的设置无济于事,谷歌搜索的问题似乎只是发现人们问如何实现我正在尝试做的完全相反。
的简单例子的完整代码如下:
Form1.vb的
Option Strict On
Option Explicit On
Option Infer Off
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For i As Integer = 0 To 2
Dim c As New CheckBox()
c.Text = "Checkbox" & i+1
If i = 0
AddHandler c.CheckedChanged, Sub(sender2 As Object, e2 As EventArgs)
If TryCast(sender2, CheckBox).Checked
TryCast(TableLayoutPanel1.Controls(1), CheckBox).Visible = False
Else
TryCast(TableLayoutPanel1.Controls(1), CheckBox).Visible = True
End If
End Sub
End If
TableLayoutPanel1.Controls.Add(c)
Next
End Sub
End Class
Form1.Designer.vb
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel()
Me.SuspendLayout
'
'TableLayoutPanel1
'
Me.TableLayoutPanel1.AutoSize = true
Me.TableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink
Me.TableLayoutPanel1.ColumnCount = 1
Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle())
Me.TableLayoutPanel1.Location = New System.Drawing.Point(13, 13)
Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
Me.TableLayoutPanel1.RowCount = 3
Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle())
Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle())
Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle())
Me.TableLayoutPanel1.Size = New System.Drawing.Size(0, 0)
Me.TableLayoutPanel1.TabIndex = 0
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(284, 261)
Me.Controls.Add(Me.TableLayoutPanel1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(false)
Me.PerformLayout
End Sub
Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel
End Class
异常请求。我怀疑你真的*寻找的是TLP的MinimumSize属性,所以它不能缩小太多。如果不是,则必须添加代码以在AutoSize和Absolute之间翻转RowStyle.SizeType属性。 –