C#Change Control.Top从16bit到32bit Int(WinForms)

时间:2009-06-04 15:36:32

标签: c# winforms panel

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


编辑,也许如果我澄清我想要做什么,你很多人都不会认为它对可用性有害。

昨天我问了这个问题: How to use VScrollBar and HScrollBar together with a RichTextBox?

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

2 个答案:

答案 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;