我正在开发一个在表单中移动面板的程序。我使用滚动条来更改面板.Top属性。但是,这家酒店只能达到-32768。在这种情况下,我需要它更高(或更低o0)。无论如何,我可以将其更改为32位int,以便它可以达到-2147483648?
编辑,也许如果我澄清我想要做什么,你很多人都不会认为它对可用性有害。
昨天我问了这个问题: How to use VScrollBar and HScrollBar together with a RichTextBox?
但是因为我无法找到答案而且其他人没有回答我,所以我不得不想出一种不同的方式来滚动富文本框。所以我的解决方案是将文本框高度调整为相等(文本框字体高度*总行数)。这意味着文本框中不会显示任何滚动条。现在我使用滚动条移动文本框顶部位置以创建伪滚动效果。当文本框在13像素处有大约2000行作为字体高度时,它可以很好地工作。但之后它最终会高出16位int。这就是为什么我需要将其更改为32位int。
答案 0 :(得分:3)
Windows滚动条本身与16位值绑定。 WinForm滚动条只反映了这个限制。如果不从头开始编写自己的滚动条控件,则无法更改它。
但你不需要这样做。滚动条中没有任何物理原因,因为您无法比屏幕中的像素更精细地滚动它,并且您的显示器不超过30000像素高(或宽)。
正常模式是将您的域值除以适当的数字。通常一个常数会做,但你也可以使用你的最大值。然后使用该值作为实际滚动条索引。
例如,假设您的值范围为0到1200355.您可以将滚动条的最大值设置为10000,然后您可以将当前选定的值检索为myScrollbar.Value *(10000/1200355)(或某些此类值) - 我手边没有确切的语法。)
是的,这意味着您会失去一些精确度 - 您将无法在滚动条上选择仅相差3个单位的值。如果你真的需要那种精度,那么滚动条控件就不是正确的工具。
答案 1 :(得分:1)
最终,如果您的面板需要高于滚动条的限制,您可以将滚动条值乘以特定的乘数。
panel1.top = scrollbar1.value * 3;
乘数可以是任何适合您需求的值。话虽这么说,超过30000像素的屏幕非常大。
此外,您可以使滚动条值与所需的最大值范围成比例。
areaHeight = 60000;
scrolldelta = areaHeight / scrollbar1.MaxValue;
panel1.Top = scrolldelta * scrollbar1.value;