C#-窗体的水平滚动保持重置为零
我知道我错过了一些愚蠢的事情。我正在尝试设置一个没有可见滚动条的表单,但仍然允许通过自定义按钮/控件进行滚动 我设置了一个空白的新WinForms项目,将一个随机用户控件放在一个位置,使其超出表单的边界,我可以滚动到这个位置 然后,我设置了一个按钮(目前仅用于测试目的),以便在单击鼠标右键时滚动,如下所示:C#-窗体的水平滚动保持重置为零,c#,winforms,C#,Winforms,我知道我错过了一些愚蠢的事情。我正在尝试设置一个没有可见滚动条的表单,但仍然允许通过自定义按钮/控件进行滚动 我设置了一个空白的新WinForms项目,将一个随机用户控件放在一个位置,使其超出表单的边界,我可以滚动到这个位置 然后,我设置了一个按钮(目前仅用于测试目的),以便在单击鼠标右键时滚动,如下所示: private void btnScrollRight_Click(object sender, EventArgs e) { this.HorizontalScroll.Value
private void btnScrollRight_Click(object sender, EventArgs e)
{
this.HorizontalScroll.Value += 10;
}
当我运行此命令并单击按钮时,表单会在瞬间移动/滚动,但随后会立即将HorizontalScroll.Value重置为0,然后返回到原始视图
现在,如果我启用了AutoScroll属性,那么这个按钮也可以正常工作——它可以像预期的那样滚动,但是我最终得到了一个可见的水平滚动条,我还没有找到隐藏它的好方法。我尝试将HScroll设置为false,我尝试将HorizontalScroll设置为false可见,但两者都不起作用
我通读了以下内容:
…这里有一些选择,但我觉得我可能只是缺少了一些基本的东西。此外,一切似乎都是颠倒的——人们说,当设置AutoScroll时,您无法通过编程更改任何内容,但这与我看到的相反
在我找到一些聪明的方法来“欺骗”滚动条隐藏或强迫滚动条以其他奇怪的方式隐藏之前,有人对正确的方法有什么建议吗?我得到了以下代码:
int sc = 0;
private void button2_Click(object sender, EventArgs e)
{
sc += 10;
this.HorizontalScroll.Value = sc;
}
private void Form1_Load(object sender, EventArgs e)
{
this.HorizontalScroll.Enabled = true;
this.HorizontalScroll.Maximum = 500; //Calculate this value
}
只有当控件超出窗体的限制并滚动直到控件和窗体的边相交时,它才起作用
计算控件扩展的程度并将最大滚动值设置为大于该值非常重要,否则会出现异常。我得到了以下代码:
int sc = 0;
private void button2_Click(object sender, EventArgs e)
{
sc += 10;
this.HorizontalScroll.Value = sc;
}
private void Form1_Load(object sender, EventArgs e)
{
this.HorizontalScroll.Enabled = true;
this.HorizontalScroll.Maximum = 500; //Calculate this value
}
只有当控件超出窗体的限制并滚动直到控件和窗体的边相交时,它才起作用
计算控件扩展的程度并将最大滚动值设置为大于该值非常重要,否则会出现异常。以下是如何使其工作的方法 首先,在表单
Load
event中添加以下代码段:
this.AutoScroll = true;
this.AutoScroll = false;
看起来没有任何意义,但第一行强制窗体正确计算虚拟可滚动矩形
然后,您需要操纵自动滚动定位
,并记住否定这些值(不要问我为什么,我不知道您所遵循的链接的作者是谁)
以下是如何让它工作的 首先,在表单
Load
event中添加以下代码段:
this.AutoScroll = true;
this.AutoScroll = false;
看起来没有任何意义,但第一行强制窗体正确计算虚拟可滚动矩形
然后,您需要操纵自动滚动定位
,并记住否定这些值(不要问我为什么,我不知道您所遵循的链接的作者是谁)
这很有效。显然,直接应用于HorizontalScroll.Value时,+=运算符不起作用。使用=设置特定值确实有效。谢谢我在调试时注意到,在内部值实际更新之前,在设置新值之后,通常需要执行一些语句。真的很奇怪,这很有效。显然,直接应用于HorizontalScroll.Value时,+=运算符不起作用。使用=设置特定值确实有效。谢谢我在调试时注意到,在内部值实际更新之前,在设置新值之后,通常需要执行一些语句。真奇怪。