C# Winforms:没有 AutoScroll 的滚动条

Posted

技术标签:

【中文标题】C# Winforms:没有 AutoScroll 的滚动条【英文标题】:C# Winforms: Scrollbars without AutoScroll 【发布时间】:2015-12-01 02:17:27 【问题描述】:

我有一个 TabPage,里面有东西。我的一些用户的屏幕很小,其中一些东西不适合。当我在 TabPage 上设置 AutoScroll tr​​ue 时,它​​会按预期添加滚动条。不过……

在这个 TabPage 中有一个 ListBox。 ListBox 的位置使得单击它以选择一个 ListItem会导致 TabPage 将整个 ListBox 滚动到视图中,这反过来又会导致单击选择错误的 ListItem。

如果我禁用 AutoScroll,ListBox 可以正常工作,但用户无法滚动 TabPage。

我曾尝试添加面板和 TableLayoutPanel,并弄乱了具有 AutoScroll 和不具有 AutoScroll 的各种组合。

我尝试了一个 DLLImport hack,它强制将一个无样式的滚动条放到面板上,但该滚动条没有做任何事情,而且它看起来不像应用程序中的其他滚动条。

编辑:请注意,有些用户的屏幕更大。在 那些 屏幕上,有足够的空间来显示整个 TabPage 而无需滚动,并且可以正常工作。

如何在没有 auto 滚动行为的情况下获得 scrollbars

【问题讨论】:

可以依靠VScrollBar & HScrollBar手动实现滚动条。 【参考方案1】:

尝试像这样创建一个新的面板控件:

public class PanelEx : Panel 
  protected override Point ScrollToControl(Control activeControl) 
    return this.DisplayRectangle.Location;
  

将此面板放在您的 TabPage 中,并将 Dock 属性设置为 Fill。将所有控件放入该面板而不是 TabPage。

【讨论】:

以上是关于C# Winforms:没有 AutoScroll 的滚动条的主要内容,如果未能解决你的问题,请参考以下文章

Winforms (C#) 中的 OleDb 参数查询:没有错误但没有更新行

C#界面里的winform AutoScroll属性

C#界面里的winform AutoScroll属性

有没有类似于 C# Winforms 的 Android RecyclerView 的东西

C# WinForms 有滑块控件吗?

在 C# winforms 中将 RDLC 报告适合 A4 页面