试试这个:
panel.AutoScroll = true
panel.VerticalScroll.Enabled = false
panel.VerticalScroll.Visible = false
编辑:
实际上,当AutoScroll = true时,它会自动处理hscroll和vscroll,您将无法更改它。我在MSDN上的Panel.AutoScroll属性中发现了这一点。
AutoScroll maintains the visibility of the scrollbars automatically. Therefore, setting the HScroll or VScroll property to true has no effect when AutoScroll is enabled.
您可以尝试以下方法来解决这个问题,我从这个链接复制了它。
行为观察 1:
如果将AutoScroll设置为true,则无法修改VerticalScroll或HorizontalScroll中的任何内容。 AutoScroll指自动滚动;控件决定何时显示滚动条、最小/最大值等等,并且您无法更改任何内容。因此,如果要自定义滚动(例如隐藏滚动条),必须将AutoScroll设置为false。
通过使用Lutz Roeder的 .NET Reflecter查看ScrollableControl的源代码,您可以发现,如果AutoScroll设置为true,则会忽略您在VerticalScroll或HorizontalScroll属性内更改属性值(如MinValue、MaxValue、Visible等)的尝试。
行为观察 2:
当AutoScroll设置为false时,您可以更改VerticalScroll.Minimum、VerticalScroll.Maximum和VerticalScroll.Visible值。
但是,您无法更改VerticalScroll.Value!!! 真是鬼畜!如果将其设置为非零值,则会将其重置为零。
相反,您必须设置AutoScrollPosition = new Point(0,desired_vertical_scroll_value)。
最后,惊喜的是,当您分配正值时,它们会翻转为负值,因此如果您检查AutoScrollPosition.X,则为负数!将其分配为正数,它会变成负数。
所以,如果您想要自定义滚动,请将AutoScroll设置为false。然后设置VerticalScroll和HorizontalScroll属性(除了Value)。然后要更改滚动值,您需要设置AutoScrollPosition,即使您没有使用自动滚动!最后,当您设置AutoScrollPosition时,它将采用相反(即负)值,因此如果您稍后想要检索当前的AutoScrollPosition,例如如果您想通过拖动鼠标来平移滚动值,则需要记住在重新分配带有一些偏移量的AutoScrollPosition之前否定返回的值。哇。真是鬼畜。
另外一件事,如果你想用鼠标平移,请使用Cursor.Position的值而不是鼠标事件参数返回的任何鼠标位置。滚动控件也会导致事件参数值偏移,这将导致它开始触发带有不需要的值的鼠标移动事件。只需使用Cursor.Position,因为它将使用鼠标屏幕坐标作为固定参考框架,这正是您在尝试平移/偏移滚动值时所需要的。
AutoScroll=true
的作用...自动给你添加滚动条。除非你完全接管行为,否则无法同时实现两者。 - DonBoitnott