【问题标题】:How to determine the full size of a Panel (including scroll bars) in C#如何在 C# 中确定面板的完整大小(包括滚动条)
【发布时间】:2011-10-16 05:06:46
【问题描述】:

我遇到的问题是一个面板,它的大小从 200x200 像素开始。对于我正在编写的程序,在任何时候我都需要知道这个面板有多大,但是这会变得很困难,因为 AutoScroll 处于打开状态,并且当插入大量内容时,面板会展开(并获得滚动条)。

我已经看过 AutoScrollPosition 和 AutoScrollOffset,甚至尝试在我的解决方案中实现这一点 - 但它似乎只告诉您当滚动条处于某个位置时有关面板的信息 - 而在任何给定时间我需要了解面板的总尺寸

所以基本上,假设一些内容进入面板并考虑到滚动距离,它真的变成了一个 600x750 像素的面板。有谁知道我可以通过什么方式获得这些信息?

谢谢

【问题讨论】:

  • 这是 WPF 应用程序吗?
  • 我的回答是基于没有属性的假设,但事实证明是:PreferredSize。

标签: .net winforms canvas scroll panel


【解决方案1】:

“包括滚动条”子句使问题无法回答。因为滚动条只适用于 DisplayRectangle。

您可以从 PreferredSize 属性中获取所需的面板大小,这样就不需要滚动条了。您可以从 SystemInformation.Horizo​​ntalScrollBarHeight 和 VerticalScrollBarWidth 属性中获取滚动条的高度和宽度。

【讨论】:

  • +1 FWIW 我认为“包括滚动条”只是意味着“显示滚动条时”。
  • 是的,PreferredSize 是 OP 想要的。 @David:我尝试了你的方法 - 奇怪的是,每个轴上偏移了 -1 个像素。
  • @Charles PreferredSize 在我尝试时与我的方法相差 4。去搞清楚!但 PreferredSize 似乎是它。必须检查滚动条是否显示。
  • @David:检查面板的填充和您放入的任何内容的边距。这些都会影响结果。
  • @David - 是的,Margin 属性默认为 3。您必须添加默认为 1 的滚动条的 SmallChange 属性值。从我记事起,滚动条就是一个巨大的皮塔饼。跨度>
【解决方案2】:

当 Panel 的内容大于其 ClientSize 时,AutoScrollMinSize 应该等于 Panel 的可滚动区域。

【讨论】:

  • AutoScrollMinSize 在我的测试中报告 (0,0),但我的答案有效! ;-)
  • 嗯,我知道反之亦然 - 将 Size 分配给 AutoScrollMinSize 会将控件的可滚动区域更改为该 Size(假设 Size 大于控件的 ClientSize)。
猜你喜欢
  • 2021-07-17
  • 2018-04-20
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
相关资源
最近更新 更多