【问题标题】:Issue: Control Span Using Table Layout Panel Column AutoSize问题:使用表格布局面板列 AutoSize 控制跨度
【发布时间】:2016-10-21 19:58:52
【问题描述】:

目标

我需要一个控件 TextBox(列:2),它存储在 TableLayoutPanel 中,以通过选中/取消选中复选框来隐藏和显示。在此隐藏和显示期间,其列必须在隐藏时完全折叠。 Label 控件需要跨越表格布局面板的列。所以当 TextBox 被隐藏时,第 2 列必须完全折叠,因为第 3 列设置为百分比(100%)。

  • 注意:我将所有控件都放在表格布局面板中,以便在不同用户的显示(100%、125%、150%)之间正确调整表单大小。

见下文:

控件:标签 - 不跨越

控件:标签 - 跨越 3 列


我认为第二列应该折叠,因为 TextBox 不再可见并且第二列的大小属性设置为自动大小。

请记住,这是我试图在实际程序中复制的一个更清晰的示例。我认为以这种方式显示它更简单。我实际上需要让功能正确展开和折叠列。

我是否遗漏了一些重要的事情?很奇怪,第二列居然变大了

【问题讨论】:

    标签: vb.net winforms show-hide tablelayoutpanel autosize


    【解决方案1】:

    这对我有用。不知道是不是因为我把Label放在Form上,和TableLayoutPanel相对。如果你还没有尝试过,我建议你这样做。

    确保标签不在文档大纲的 TableLayoutPanel 中 (Ctrl+Alt+T)。

    这是我在设计器文件中的控件属性

    标签。锚属性已更改

    Me.Label1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
        Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
    Me.Label1.BackColor = System.Drawing.SystemColors.Control
    Me.Label1.Location = New System.Drawing.Point(3, 32)
    Me.Label1.Name = "Label1"
    Me.Label1.Size = New System.Drawing.Size(338, 18)
    Me.Label1.TabIndex = 0
    Me.Label1.Text = "Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test T" & _
    "est Test Test Test Test Test Test Test Test Test Test Test Test Test Test Test"
    

    表格布局面板。 Dock 属性以及列和行已更改。

    Me.TableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.OutsetDouble
    Me.TableLayoutPanel1.ColumnCount = 3
    Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle())
    Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle())
    Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0!))
    Me.TableLayoutPanel1.Controls.Add(Me.CheckBox1, 0, 0)
    Me.TableLayoutPanel1.Controls.Add(Me.TextBox1, 1, 0)
    Me.TableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill
    Me.TableLayoutPanel1.Location = New System.Drawing.Point(0, 0)
    Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
    Me.TableLayoutPanel1.RowCount = 2
    Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26.0!))
    Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle())
    Me.TableLayoutPanel1.Size = New System.Drawing.Size(344, 233)
    Me.TableLayoutPanel1.TabIndex = 1
    

    CheckBox 和 TextBox 没什么特别的。

    CheckBox 检查处理程序很简单

    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
        Me.TextBox1.Visible = Me.CheckBox1.Checked
    End Sub
    

    这就是我的表单在选中和未选中时的作用。

    【讨论】:

    • 嗯,这是解决问题的一种方法,但我仍然不明白为什么 TableLayoutPanel 会做出这样的反应。我为具有不同显示百分比(100%、125%、150%)的用户使用表格布局面板。有趣的是,如果我们要对一行执行与显示/隐藏相同的逻辑,它会起作用……但对于列则不行
    • 什么补丁,标签需要在 TLP 之外的事实?
    • 是的,这不完全是一个修复。为了便于使用,标签必须位于该特定单元格中。但是,当控件不可见时列变大的事实对我来说很奇怪,因为最后一列是百分比。不过,我感谢您的帮助!
    • “标签必须位于特定单元格中以便于使用。”谁的轻松,开发者的还是用户的?从用户的角度来看,它似乎工作正常。对于开发人员,您可以将其全部包装在一个用户控件中,甚至可以从 TableLayoutPanel 派生一个控件。有很多方法可以让它发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多