反转窗口形成垂直滚动条

本文关键字:垂直 滚动条 窗口 | 更新日期: 2023-09-27 17:55:23

我正在制作一个winforms应用程序c#。垂直滚动条最小值位于顶部,最大值位于底部,向下滚动会增加值,反之亦然。有没有办法反转它,让上是高,下是低。

反转窗口形成垂直滚动条

您实际上无法仅通过查看滚动条来"看到"滚动条的值,因此,换句话说,将最小值放在顶部,将最大值放在底部,然后在访问它时只是反转值之间没有实际区别:

private void ScrollBar_Scroll(object sender, ScrollEventArgs e)
{
    // get the value (0 -> 100)
    int value = scrollBar.Value;
    // invert it (100 -> 0)
    value = 100 - value;
    // display it
    someLabel.Text = value.ToString();
}

当然,您也可以重写 VScrollBar 类并添加自己的"倒置值"属性:

public class InvertedScrollBar : VScrollBar
{
    /// <summary>
    /// Gets or sets the "inverted" scrollbar value.
    /// </summary>
    /// <value>The inverted value.</value>
    public int InvertedValue
    {
        get
        {
            int offset = this.Value - this.Minimum;
            return this.Maximum - offset;
        }
        set
        {
            int offset = this.Maximum - value;
            this.Value = this.Minimum + offset;
        }
    }
}

请注意,在配置最大值时,最大值仍必须大于最小值。

滚动条的 Value 属性返回的值从 scrollBar.MinimumscrollBar.Maximum - scrollBar.LargeChange

因此,如果滚动条的最小值为 5,最大值为 15,并且 LargeChange(兼作滚动范围的可见部分)为 3,则可能的返回值从 5 变为 12。

因此,要反转该值,您实际上想要使用:

scrollBar.Minimum + scrollBar.Maximum - scrollBar.LargeChange - scrollBar.Value

(通常,您可以将值视为拇指左边缘或上边缘的位置。 上面的公式将为您提供拇指的底部边缘。 如果您仍然想要上边缘(即上面示例中的值从 8 到 15),请使用:

scrollBar.Minimum + scrollBar.Maximum - scrollBar.Value