在ScrollableControl中使用HScroll/VScroll有什么用?

shi*_*ngo 9 c# winforms scrollable

ScrollableControl类有2个受保护的布尔属性:HScroll和VScroll.

正如文件所说:

获取或设置一个值,该值指示水平滚动条是否可见.

AutoScroll自动保持滚动条的可见性.因此,启用AutoScroll时,将HScroll或VScroll属性设置为true无效.

所以我像这样使用它们,但滚动条没有显示:

class MyScrollableControl : ScrollableControl {
    public MyScrollableControl() {
        this.AutoScroll = false;
        this.HScroll = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用以下代码,它的工作原理:

this.HorizontalScroll.Visible = true;
Run Code Online (Sandbox Code Playgroud)

当我把它们放在一起时,滚动条仍然是不可见的,并且HScroll和Horizo​​ntalScroll.Visible的值保持为False.

this.AutoScroll = false;
this.HScroll = true;
this.HorizontalScroll.Visible = true;
Run Code Online (Sandbox Code Playgroud)

那么HScroll和VScroll的真正用途是什么?


更新

我的代码和测试

在此输入图像描述

ASp*_*rin 6

HScroll属性不会直接影响滚动的知名度,但它阻止滚动到隐藏HorizontalScroll.Visible价值

在此输入图像描述

如果HorizontalScroll.Visible设置为truethan HScroll也会获得一个值true(参见表中的第2行)

如果AutoScroll设置为true,则HorizontalScroll.Visible始终保持true并且HScroll没有任何影响(参见最后2行)

使用包含3个带下一个处理程序代码的按钮创建一个应用程序,并使用它来查看那里到底发生了什么:

private void button1_Click(object sender, EventArgs e)
{
    AutoScroll = !AutoScroll;
    SetValues();
}

private void button3_Click(object sender, EventArgs e)
{
    HScroll = !HScroll;
    SetValues();
}

private void SetValues()
{
    button1.Text = $"Auto: {(AutoScroll ? "On" : "Off")}";
    button3.Text = $"HScroll: {(HScroll ? "On" : "Off")}";
    button2.Text = $"Visible: {(HorizontalScroll.Visible ? "On" : "Off")}";
}

private void button2_Click(object sender, EventArgs e)
{
    HorizontalScroll.Visible = !HorizontalScroll.Visible;
    SetValues();
}
Run Code Online (Sandbox Code Playgroud)

用法(AutoScroll = false)

要手动显示滚动设置HorizontalScroll.Visibletrue

手动隐藏滚动设置HScroll,以falseHorizontalScroll.Visiblefalse

用法(AutoScroll = true)

HorizontalScroll.Visible永远true不会改变

HScroll 不会影响任何事情

在此输入图像描述