WinForms:如何使用 AutoScroll 避免水平滚动条?

发布于 2024-10-20 05:53:27 字数 293 浏览 1 评论 0原文

我正在编写一个自定义控件,其中包含一个项目列表(子控件),这些项目可以水平调整大小以适应控件的宽度。如果有很多项目(或者调整了控件的大小,使其垂直高度不够),则需要垂直滚动条;但是当出现垂直滚动条时,子控件突然太宽,导致出现水平滚动条。

鉴于我手动控制控件放置(不依赖 AnchorStyles),保证水平滚动条在不必要时不会出现的正确方法是什么? (注意:我无法手动控制 VScroll 属性,因为我使用的是 Compact Framework;如果项目的最小宽度比客户区域宽,那么将需要水平滚动条。)

I'm writing a custom control that contains a list of items (child controls) that resize horizontally to fit the width of the control. If there are lots of items (or the control is resized so that it is not tall enough vertically) then a vertical scroll bar is necessary; but when the vertical scroll bar appears, the child controls are suddenly too wide, which causes a horizontal scroll bar to appear.

What's the proper way to guarantee that a horizontal scroll bar does not appear when it is not necessary, given that I am controlling the control placement manually (not relying on AnchorStyles)? (Note: I can't control the VScroll property manually because I'm on Compact Framework; and if an item's minimum width is wider than the client area then a horizontal scroll bar will be required legitimately.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假装不在乎 2024-10-27 05:53:28

在类似的情况下,我所做的是每次向列表中添加一个项目后,我都会检测滚动条是否可见并手动调整宽度。

我检测滚动条是否显示的方法是:

  1. 测试 WS_VSCROLL 是通过 P/Invoke 通过 GetWindowLong()
  2. 扫描控件的子级以查找垂直滚动条控件。

这取决于控件如何处理滚动条,哪一个是正确的。

而且这是在 Windows 上,而不是在 CF 上,所以我不确定这是否会以完全相同的方式工作。

What I did in a similar situation was after every time I added an item to the list I detected whether the scroll bar was visible or not and adjusted my the width manually.

What I did to detect whether the scroll bar was showing was either:

  1. Test for the WS_VSCROLL was set on the control via P/Invoke via GetWindowLong().
  2. Scan the control's children for a vertical scroll bar control.

It depends on how the control handles scroll bars as to which one is correct.

Also this was on Windows, not in the CF so I'm not sure if this will work exactly the same way.

近箐 2024-10-27 05:53:28

计算子控件所需的宽度时,请考虑垂直滚动条的宽度:

System.Windows.Forms.SystemInformation.VerticalScrollBarWidth

Take the width of the vertical scrollbar into account when calculating the required width for your child controls:

System.Windows.Forms.SystemInformation.VerticalScrollBarWidth
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文