Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-窗体的水平滚动保持重置为零_C#_Winforms - Fatal编程技术网

C#-窗体的水平滚动保持重置为零

C#-窗体的水平滚动保持重置为零,c#,winforms,C#,Winforms,我知道我错过了一些愚蠢的事情。我正在尝试设置一个没有可见滚动条的表单,但仍然允许通过自定义按钮/控件进行滚动 我设置了一个空白的新WinForms项目,将一个随机用户控件放在一个位置,使其超出表单的边界,我可以滚动到这个位置 然后,我设置了一个按钮(目前仅用于测试目的),以便在单击鼠标右键时滚动,如下所示: private void btnScrollRight_Click(object sender, EventArgs e) { this.HorizontalScroll.Value

我知道我错过了一些愚蠢的事情。我正在尝试设置一个没有可见滚动条的表单,但仍然允许通过自定义按钮/控件进行滚动

我设置了一个空白的新WinForms项目,将一个随机用户控件放在一个位置,使其超出表单的边界,我可以滚动到这个位置

然后,我设置了一个按钮(目前仅用于测试目的),以便在单击鼠标右键时滚动,如下所示:

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时,+=运算符不起作用。使用=设置特定值确实有效。谢谢我在调试时注意到,在内部值实际更新之前,在设置新值之后,通常需要执行一些语句。真奇怪。