2

我正在开发一个在表单中移动面板的程序。我使用滚动条来更改面板的 .Top 属性。但是,此属性只会达到 -32768。在这种情况下,我需要它更高(或更低 o0)。无论如何我可以将它更改为 32 位 int 以便它可以达到 -2147483648?


编辑,也许如果我澄清我正在尝试做的事情,你不会认为这对可用性不利。

昨天我问了这个问题: 如何将 VScrollBar 和 HScrollBar 与 RichTextBox 一起使用?

但是因为我找不到答案并且没有其他人回答我,所以我不得不想一种不同的方式来滚动富文本框。所以我的解决方案是将文本框高度调整为相等(文本框字体高度*总行数)。这意味着不会显示文本框上的滚动条。现在我使用滚动条移动文本框的顶部位置以创建伪滚动效果。当文本框在 13 像素处有大约 2000 行作为字体高度时,它可以完美运行。但在那之后它最终会高于 16 位 int。这就是为什么我需要将其更改为 32 位 int。

4

2 回答 2

3

Windows 滚动条本身与 16 位值相关联。WinForm 滚动条只是反映了这个限制。如果不从头开始编写自己的滚动条控件,就无法更改它。

但你不需要这样做。没有物理理由在滚动条中有这么多值,因为您不能滚动它比屏幕中的像素更精细,而且您的显示器不超过 30000 像素高(或宽)。

正常模式是将您的域值除以适当的数字。通常一个常数就可以了,但你也可以使用你的最大值。然后将该值用作实际的滚动条索引。

例如,假设您的值范围从 0 到 1200355。您可以将滚动条的最大值设置为 10000,然后您可以检索当前选择的值,如 myScrollbar.Value*(10000/1200355) (或一些这样的——我手头没有确切的语法)。

是的,这意味着您会失去一些精度——您将无法在滚动条上选择仅相差 3 个单位的值。如果您真的需要那种精度,那么滚动条控件不是正确的工具。

于 2009-06-04T15:45:02.147 回答
1

最终,如果您的面板需要超出滚动条的限制,您可以将滚动条值乘以特定的乘数。

 panel1.top = scrollbar1.value * 3;

乘数可以是适合您需要的任何值。话虽如此,超过 30000 像素的屏幕是相当大的。

此外,您可以使滚动条值与所需的最大值范围成比例。

areaHeight = 60000;
scrolldelta = areaHeight / scrollbar1.MaxValue;

panel1.Top = scrolldelta * scrollbar1.value; 
于 2009-06-04T16:03:49.710 回答