【问题标题】:TableLayoutPanel height for autoscroll based on percentage of visible area基于可见区域百分比的自动滚动的 TableLayoutPanel 高度
【发布时间】:2012-06-21 02:10:05
【问题描述】:

我有一个自动滚动的 TableLayoutPanel,我正在向其中动态添加行。我希望每行的高度是 TableLayoutPanel 可见区域的 1/3,即在添加第 4 个面板和自动滚动启动之前面板的原始高度。我可以计算手动到达行的高度并将其设置为绝对高度,但可以调整 TableLayoutPanel 的大小。在那种情况下,我可以处理调整大小的事件并重新计算每行的绝对高度,但我想知道是否有更好的方法。有没有办法将行高指定为可见面板区域的百分比,还是我应该手动计算,绝对高度路线?

【问题讨论】:

标签: c# winforms tablelayoutpanel


【解决方案1】:

TableLayoutPanel.RowStyle.Percent

行高被解释为表格高度的百分比

如果您的表格有 2 行,每行占面板的 50% - 并希望添加第三行,将所有行调整为 33%:

    tableLayoutPanel1.RowCount = 3;
    this.tableLayoutPanel1.RowStyles[0].Height = 33F;
    this.tableLayoutPanel1.RowStyles[1].Height = 33F;
    this.tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 33F));

【讨论】:

  • 这适用于前 3 行,但我的问题是,当我添加第四行时,如果 AutoSize == true,TLP 会扩展并且有四个大小均匀的行(没有滚动条)。如果 AutoSize == false,前 3 个面板的高度保持不变,但第四个面板不可见。 AutoScroll == true,但不出现滚动条。我希望滚动条出现并且每一行是可见区域高度的 1/3。
  • 另外,经过试验,这仍然没有解决添加第四个面板时尺寸发生变化的事实。我不再希望每行都为高度的 33%,而是希望它为可见高度的 33%。
  • @tronbabylove 将表格放在主机面板中,AutoScroll = true 这是您想要的可见区域高度。行是面板高度的 1/3 - 随着 TablePanel 的增长,面板会处理所有滚动条问题。
  • 谢谢,我最终找到了这个,但这带来了另一个问题,因为我无法在不丢失 AutoSize 功能的情况下将 TLP 停靠到容器面板,所以即使容器面板增长 TLP 也会保持相同的大小。我终于尝试了 FlowLayoutPanel,似乎已经实现了我想要的。将发布我的解决方案。
【解决方案2】:

我最终在自上而下的 FlowLayoutPanel 中实现了我需要的东西,锚定了 Top、Down、Left 和 Right,以便它可以根据表单调整大小。第一个子面板被添加到 FlowLayoutPanel 并分配一个略小于 FLP 宽度的宽度。每个后续子面板都被赋予 Dock 填充样式,以便其宽度自动匹配第一个面板。每个面板都分配了 FLP.Height / 3 的高度,并且我有一个 FLP 的调整大小事件的处理程序,以根据需要重新计算子面板的高度。

感谢所有评论和回答的人。我赞成您的回答,因为它们对其他人有帮助,只是没有解决我的特定问题。

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    相关资源
    最近更新 更多