【问题标题】:How to scroll a panel manually?如何手动滚动面板?
【发布时间】:2008-11-04 17:07:35
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    你应该可以使用组件的 VerticalScroll 和 Horizo​​ntalScroll 属性:

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

    【讨论】:

    • 它只在AutoScroll=true 时有效,但是我无法隐藏Horizo​​ntalScroll/VerticalScroll。设置 Scroll.Visible=false 不会隐藏滚动)
    • 任何想要像 OP 一样隐藏滚动条的人请注意:不要尝试。
    • 由于我发现了一个奇怪的错误,最好使用var v = ScrollingPanel.VerticalScroll;v.Value = v.Value = Math.Min(v.Maximum, v.Value + v.LargeChange);,否则滚动条实际上​​不会在面板移动时移动。由于某种原因,该值在绘制滚动条之前会变回,但第二次设置它会更新它。
    【解决方案2】:

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

    • 在面板内放置一个面板。把滚动条控件放在父面板上,然后用滚动条改变里面面板的Top属性。

    它很简单,而且效果很好。

    【讨论】:

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

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

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

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

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

    【讨论】:

    • 不要认为可以将位置设置为 -ve 值。
    • fallenidol :这完全是错误的!自己尝试一下,如果你将控件的 .Left 属性设置为 -10,它将向容器边框的左侧移动。
    • 我看到我仍然对这个答案感到失望。如果有人这样做,请添加评论为什么,因为我很好奇:)
    • 我想这是因为你的建议是一个可怕的、可怕的 hack - 更不用说效率很低了 :)
    • @丹。我同意循环通过控件效率低下,而不是将所有控件添加到单个面板并调整该面板的位置。将控件的位置设置为负偏移不能被认为是“可怕的,可怕的黑客行为”。在没有 AutoScroll 的情况下,您如何获得离开左/上边框的控件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2015-03-14
    • 2010-11-29
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多