【问题标题】:C# Change Control.Top From 16bit to 32bit Int (WinForms)C# 将 Control.Top 从 16 位更改为 32 位 Int (WinForms)
【发布时间】:2010-10-31 09:10:16
【问题描述】:

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


编辑,也许如果我澄清我正在尝试做的事情,你们很多人不会认为这会影响可用性。

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

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

【问题讨论】:

标签: c# winforms panel


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我认为从您的回答来看,您并没有完全理解我的意思。我的滚动条只是一个普通滚动条,最多 1000 个。它的面板需要顶部大于 30000
【解决方案2】:

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

 panel1.top = scrollbar1.value * 3;

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

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

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

panel1.Top = scrolldelta * scrollbar1.value; 

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多