2011-11-01 58 views
0

嘿,我试图控制vb.net面板框的水平滚动。的问题是,我可以用下面的代码似乎只是移动它只是一点点:面板滚动可编程

Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll 
    panSS.HorizontalScroll.Value = HScrollBar1.Value 
End Sub 

的形式宽度是800,而板本身伸展1000+(但只有800像素被示出)。我只是不知道如何去使用HScrollBar来移动它,就像它在自动滚动功能上一样。

任何帮助将是伟大的。

谢谢!

大卫

更新

也试过这样做的,研究小组将没有移动:

Dim range = HScrollBar1.Maximum - HScrollBar1.LargeChange + HScrollBar1.SmallChange 
Dim panelPos = (panSS.AutoScrollMinSize.Width - panSS.Width) * e.NewValue/range 

    panSS.AutoScrollPosition = New Point(panelPos, 0) 

回答

3

是的,不起作用,因为面板的滚动范围大得多比你的滚动条。你可以通过设置HScrollBar.Maximum值等于面板的滚动宽度来修复它。或者使用此代码,它的工作原理,无论滚动范围:

Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As ScrollEventArgs) Handles HScrollBar1.Scroll 
    Dim range = HScrollBar1.Maximum - HScrollBar1.LargeChange + HScrollBar1.SmallChange 
    Dim panelPos = (Panel1.AutoScrollMinSize.Width - Panel1.Width) * e.NewValue/range 
    Panel1.AutoScrollPosition = New Point(panelPos, 0) 
End Sub 
+0

感谢您的回复,但代码似乎并没有移动面板? **用此代码更新了OP ** – StealthRT

+0

嗯,当我测试它时,它会滚动我的面板。 AutoScroll = true,AutoScrollMinSize = {1000,0}。当然,我不知道你的面板是什么样子。不要保守秘密。 –

+0

明白了。正如您在上一篇文章中所述,我忽略了AutoScrollMinSize的大小。现在所有的动作。 :o)谢谢,汉斯 – StealthRT

1

我会在面板的AutoScroll属性设置为True。将面板宽度保留为800,但是当您将内容添加得更宽时,将出现内置滚动条并管理滚动。