C# Winforms:没有自动滚动的滚动条

C# Winforms: Scrollbars without AutoScroll

我有一个 TabPage,里面有东西。我的一些用户的屏幕很小,有些东西放不下。当我在 TabPage 上将 AutoScroll 设置为 true 时,它​​会按预期添加滚动条。然而...

这个TabPage中有一个ListBox。 ListBox 的位置使得单击 select ListItem 会导致 TabPage 将整个 ListBox 滚动到视图中 ,这又会导致单击 select错误的 ListItem。

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

我已经尝试添加面板和 TableLayoutPanels 并搞乱各种组合,其中有 AutoScroll,哪些没有。

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

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

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

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

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

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