情景:
现在运行它,并垂直调整窗体的大小,以便您可以看到一个VERTICAL滚动条。
问题:出现两个滚动条,因为垂直滚动条的存在会减小客户区的宽度,从而迫使水平滚动条出现。
显然,.NET首先评估是否需要垂直滚动条,然后评估水平是否应该出现,这取决于客户端大小是否因垂直scxrollbar的存在而减小。 (即同一个实验不会导致不必要的VERTICAL滚动条出现......只有水平滚动条。)
我正在使用VB2008 Express,但我猜这会延续到更高版本。
我需要的解决方案:我需要以下任何一种:A)“仅垂直自动滚动”面板。 B)我需要一种方法来告诉面板“重新思考”水平滚动条是否真的是必要的。 (刷新似乎没有。)
答案 0 :(得分:3)
为了使用面板自动滚动属性,我这样做:
为了了解睫毛棒的尺寸,请使用
SystemInformation.HorizontalScrollBarHeight
SystemInformation.VerticalScrollBarWidth
因此,您可以在显示竖线条时更改面板的尺寸。
答案 1 :(得分:2)
AutoScroll
属性不允许您对滚动条进行过多控制(即使您具有VerticalScroll
和HorizontalScroll
属性)。
在拟议的替代方案中,我选择A; this post中的标记答案为同等问题提供了一个非常有效的解决方案。转换后的&改编的代码(其中Panel1
是您问题中提到的小组):
Private Declare Function ShowScrollBar Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal wBar As Integer, ByVal bShow As Boolean) As Boolean
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Try
ShowScrollBar(Panel1.Handle, 0, False)
Catch ex As Exception
End Try
MyBase.WndProc(m)
End Sub
如果您将面板的AutoScroll
属性设置为true并添加此代码,您将获得所需内容。
注意:建议的代码有效但价格一定:我个人打算尽可能避免使用Protected Overrides Sub WndProc
代码。如果准确地获得此功能对您来说很重要,请依赖于所提出的方法;否则,您可能需要考虑其他替代方案(例如,AutoScroll = False
并在面板中添加VScrollBar
,这将始终存在。
答案 2 :(得分:1)
我遇到的东西听起来就像你描述的那样。我只想要一个垂直滚动,因为它最终将包含许多东西,但不是水平滚动。我用了一个表布局面板;设置面板的垂直尺寸,以便VScroll显示;设置宽度以适应将要进入的内容以及代码将使用的任何边距或装订线。
然后,在TableLayoutPanel
中将滚动面板的宽度设置为绝对(我使用了比panel.width多2个像素)。如果/当用户调整大小时,所有额外的大小将分配给其他所有内容。基本上不要让滚动面板的宽度发生变化。可能必须/想要设置最小的表单大小。
我添加的东西都是相同的宽度,如果你的宽度不同,你可能需要设置它以适应最宽的。
不确定你是否遇到同样的事情,但确实听起来像是这样。