Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何手动滚动面板?_C#_.net_Winforms - Fatal编程技术网

C# 如何手动滚动面板?

C# 如何手动滚动面板?,c#,.net,winforms,C#,.net,Winforms,我想使用Panel.AutoScroll为true时可用的相同功能,但滚动条不可见 为此,我需要知道如何使用代码中的函数向左/向右上/下滚动。您应该能够使用组件的垂直滚动和水平滚动属性: c.HorizontalScroll.Value += 100; c.VerticalScroll.Value = c.VerticalScroll.Maximum; 面板上可能有一个属性来执行此操作,或者您可以循环所有面板子项并调整它们的位置 例如,要将所有控件移动10 px: int xoffset =

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


为此,我需要知道如何使用代码中的函数向左/向右上/下滚动。

您应该能够使用组件的垂直滚动和水平滚动属性:

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

面板上可能有一个属性来执行此操作,或者您可以循环所有面板子项并调整它们的位置

例如,要将所有控件移动10 px:

int xoffset = 10;

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

控件可以移动到负位置以使其移出面板,同样,它们的位置值也可以大于面板大小以使其移出面板。

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

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

它很简单,工作起来也很漂亮。

它只在AutoScroll=true时工作,但是我无法隐藏水平滚动/垂直滚动。设置Scroll.Visible=false不隐藏滚动条)任何想要像OP一样隐藏滚动条的人注意:不要尝试。由于我发现了一个奇怪的错误,最好使用
var v=ScrollingPanel.VerticalScroll;v、 值=v.值=数学最小值(v.最大值,v.值+v.大变化)或滚动条实际上不会移动。由于某些原因,该值会在绘制滚动条之前更改回原来的值,但第二次设置会更新它。不要认为可以将位置设置为-ve values。fallenidol:这完全是错误的!如果您将控件的.Left属性设置为-10,那么您可以自己尝试一下。它将移动到容器边界的左侧。我看到我仍然得到了这个答案的答案。如果有人这样做,请添加一条评论,说明原因,因为我很好奇:)我想这是因为你的建议是一个可怕的、可怕的黑客行为——更不用说效率极低:)@Dan。我同意通过控件进行循环是低效的,而不是将所有控件添加到单个面板并调整面板位置。将控件的位置设置为负偏移量不能被视为“可怕的、可怕的黑客行为”。如果没有AutoScroll,您如何获得离开左/上边框的控件?这比我见过的任何其他方法都好,没有代码可写。为什么要使用滚动条控件?只需将父面板设置为autoscroll即可。请注意,Cyril的优秀建议要求子面板的高度足够大,可以查看所有子控件(父窗体是否足够大,可以显示整个面板)。