如何确定滚动条c#.NET的正确最大值(windows是如何做到的?)

如何确定滚动条c#.NET的正确最大值(windows是如何做到的?),c#,.net,bitmap,scrollbar,picturebox,C#,.net,Bitmap,Scrollbar,Picturebox,在我开始提问之前,让我解释一下我的设置: 首先:我有一个保存运行时生成的位图的PictureBox。此位图的宽度可以不同,但高度始终相同 Second:PictureBox不支持滚动,因此,我将PictureBox停靠在面板中。起初,我使用了面板的autoscroll功能,但在发现PictureBox有大小限制后,我放弃了这一功能。我还了解到,最好用小图片盒,只画需要看的东西,而不是整个图像 第三:因此我添加了一个HScrollBar,这很好,很漂亮,但我似乎无法计算出滚动条的大小。我尝试将滚动

在我开始提问之前,让我解释一下我的设置:

首先:我有一个保存运行时生成的位图的PictureBox。此位图的宽度可以不同,但高度始终相同

Second:PictureBox不支持滚动,因此,我将PictureBox停靠在面板中。起初,我使用了面板的autoscroll功能,但在发现PictureBox有大小限制后,我放弃了这一功能。我还了解到,最好用小图片盒,只画需要看的东西,而不是整个图像

第三:因此我添加了一个HScrollBar,这很好,很漂亮,但我似乎无法计算出滚动条的大小。我尝试将滚动条的最大值设置为位图的长度,但正如您所看到的,如果我使用autoscroll功能,我的滚动条的大小比Windows设置的要小得多

我的问题是,滚动条大小背后的数学原理是什么?如何在自定义滚动条中模拟它?


如果我的问题不清楚,请告诉我,我会尽力让它更容易理解。提前感谢你的帮助

我发现了问题所在。也许我应该再试试看。:)

答案在于
LargeChange
属性。我将
最大值设置为位图的总宽度,然后将
最大值设置为我想要显示的宽度。(即图片盒的宽度)


“滚动条”的大小由
LargeChange
的值与
最大值的比值决定。例如,如果要显示的宽度(
LargeChange
)为100,总宽度(
Maximum
)为300,则“滚动条”大小将为滚动条长度的1/3。(100/300)。

我也遇到了同样的问题,并试图解决它,我有一个面板,其中包含另一个名为panelChild的面板,默认滚动条很小,我需要更大的滚动条,所以我使用HScrollBar(显示在默认滚动条顶部),我在这里发布我的解决方案,可能对某人有帮助吗

public Form() {
    InitializeComponent();

    hScrollBar.Maximum = panelChild.Width;
    hScrollBar.LargeChange = panel.Width; // panel which contain panelChild, and this hScrollBar will same as panel scrollbar
    hScrollBar.Scroll += HScrollBar_Scroll;
}

private void HScrollBar_Scroll(object sender, ScrollEventArgs e)
{
    int diference = e.OldValue - e.NewValue;
    foreach (Control c in panel.Controls)
    {
         c.Location = new Point(c.Location.X + diference, c.Location.Y);
    }
}

你的自定义滚动条是否滚动得不够远,无法看到所有的图片框?@Dave,我还没有将其编程为实际滚动,但我问这个问题的原因是,我希望“滚动条”尽可能大,同时仍能滚动到最后。滚动条需要很大,因为这个应用程序将在触摸屏上使用。啊哈-所以问题在于“拇指”的大小,而不是滚动功能本身。你找过自定义滚动控件吗?正确!你有什么建议吗?我发现: