ScrollableControl类有2个受保护的布尔属性:HScroll和VScroll。
正如document所说:
获取或设置一个值,指示水平滚动条是否可见。
和
AutoScroll会自动保持滚动条的可见性。因此,启用AutoScroll时,将HScroll或VScroll属性设置为true无效。
所以我像这样使用它们,但滚动条没有显示:
class MyScrollableControl : ScrollableControl {
public MyScrollableControl() {
this.AutoScroll = false;
this.HScroll = true;
}
}
如果我使用以下代码,它可以工作:
this.HorizontalScroll.Visible = true;
当我把它们放在一起时,滚动条仍然是不可见的,并且HScroll和HorizontalScroll.Visible的值保持为False。
this.AutoScroll = false;
this.HScroll = true;
this.HorizontalScroll.Visible = true;
那么HScroll和VScroll的实际用途是什么?
更新
我的代码和测试
答案 0 :(得分:6)
HScroll
属性不会直接影响滚动可见性,但阻止隐藏滚动 HorizontalScroll.Visible
值
如果HorizontalScroll.Visible
设置为true
而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();
}
false
)手动将滚动设置HorizontalScroll.Visible
显示为true
手动隐藏滚动集HScroll
至false
而非HorizontalScroll.Visible
至false
true
) HorizontalScroll.Visible
始终为true
且无法更改
HScroll
不会影响任何事情
答案 1 :(得分:3)
那么HScroll和VScroll的实际用途是什么?
当您具有显示滚动条的意图时,将它们设置为true。但这还不够,你还必须陈述他们应该展示什么。滚动条需要知道拇指大小,最小和最大位置以及当前位置。
你正在与内部ApplyScrollbarChanges() method进行战斗。它做的一件事是隐藏滚动条,即使HScroll或VScroll设置为true,如果它没有足够的信息来配置条形图。该方法的代码太大而不适合这里,简而言之,它从以下内容中获取此信息:
第2项是一个有吸引力的自定义角度,但它们使LayoutEngine类成为内部类,因此您无法获得自己的类。第3项与AutoLayout = true已经完全没有根本区别。它确实有效,只需在构造函数中添加一个控件,重写OnClientSizeChanged()以调用AdjustFormScrollbars(true),然后您就会看到滚动条。
使第1项控制滚动条。属性设置器显示like this。是的,它偷偷地将AutoScroll属性设置为true:)
只需设置AutoScrollMinSize属性即可控制滚动条。
答案 2 :(得分:2)
HScroll
将显示水平滚动条,AutoScroll
属性未定义。
在所有未显示滚动条的示例中,这是因为您将AutoScroll
设置为false,隐藏了任何滚动条的显示。