如何手动滚动面板?

16

我想使用与 Panel.AutoScroll 为 true 时相同的功能,但滚动条不可见。

为了做到这一点,我需要知道如何使用代码中的函数向左/向右/向上/向下滚动。

3个回答

13

你应该能够使用组件的VerticalScroll和HorizontalScroll属性:

c.HorizontalScroll.Value += 100;
c.VerticalScroll.Value = c.VerticalScroll.Maximum;

只有当AutoScroll=true时才有效,但那时我就无法隐藏HorizontalScroll/VerticalScroll。设置Scroll.Visible=false并不能隐藏滚动条。 - Jonas
想要像原帖一样隐藏滚动条的人请注意:不要尝试。 - Léon Pelletier
4
由于我发现了一个奇怪的bug,建议您使用var v = ScrollingPanel.VerticalScroll;v.Value = v.Value = Math.Min(v.Maximum, v.Value + v.LargeChange);,否则滚动条在面板移动时实际上不会移动。由于某种原因,在绘制滚动条之前,值会再次更改,但第二次设置将更新它。 - Patrick

10

如果您不想使用 Autoscroll 属性,有一种方法是我很久以前用过的。

  • 在面板内部放置另一个面板。将滚动条控件放置在父面板上,然后使用滚动条控件更改内部面板的 Top 属性。

这种方法简单易行并且效果非常好。


这比我见过的任何其他方法都要好,而且无需编写代码。 - MrWuf
为什么要使用滚动条控件?只需将父面板设置为自动滚动即可。 - ASA
请注意,Cyril的出色建议要求子面板的高度足够大,以查看所有子控件(如果父窗体足够大以显示整个面板)。 - AlainD

-3

面板上可能有一个属性可以实现这个功能,或者您可以循环遍历所有面板子元素并调整它们的位置。

例如,将所有控件移动10像素:

int xoffset = 10;

foreach(Control c in panel1.Controls)
    c.Location.X += xoffset;

控件可以移动到负位置,使它们移出面板,同样地,它们可以具有比面板尺寸更大的位置值,以使它们移出面板。


不要以为你可以将位置设置为负值。 - pmcilreavy
fallenidol:那就是完全错误的!如果你将控件的.Left属性设置为-10,它会移动到容器边界的左侧。试试看吧。 - sindre j
我看到我的回答仍然被踩。如果有人这样做,请添加评论说明原因,因为我很好奇 :) - sindre j
1
我想这是因为你的建议是一个可怕的、可怕的黑客——更不用说高度低效了 :) - Dan
@Dan。我同意循环遍历控件是低效的,与将所有控件添加到单个面板并调整该面板位置相比。将控件的位置设置为负偏移量不能被视为“可怕的,可怕的黑客攻击”。否则,你如何在没有AutoScroll的情况下获得控件移动到左/上边框之外的效果? - sindre j

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接