C# 顶部停靠控制超过32768像素

C# 顶部停靠控制超过32768像素,c#,winforms,docking,C#,Winforms,Docking,我有一个WinForms应用程序,允许您编辑文档。每个文档由章节组成,每个章节包含一组RTF块。使用Dock=DockStyle.Top将RTF块加载到面板控件中 问题是,当一章的总高度变得太大(估计>32768像素)时,较低的块没有正确对接:它们出现在彼此后面。在尝试隔离问题时,我注意到类似于LabelControl的简单控件也会出现这种情况 我尝试过的方法有Refresh()、Invalidate()和PerformLayout:它们不会解决问题 的作用是调整表单的大小。之后,所有控制装置均

我有一个WinForms应用程序,允许您编辑文档。每个文档由章节组成,每个章节包含一组RTF块。使用
Dock=DockStyle.Top
将RTF块加载到
面板控件中

问题是,当一章的总高度变得太大(估计>32768像素)时,较低的块没有正确对接:它们出现在彼此后面。在尝试隔离问题时,我注意到类似于
LabelControl
的简单控件也会出现这种情况

我尝试过的方法有
Refresh()
Invalidate()
PerformLayout
:它们不会解决问题

的作用是调整表单的大小。之后,所有控制装置均正确布置

有人能帮助解决这个问题而不调整表单的大小吗

附上一份说明问题的报告


如果您有可能决定更改此布局,我建议您采用另一种方法,使用某种分页方式显示/编辑文档章节,或将RTF块折叠到菜单中并仅显示当前内容

你看。。高度值应该是16位整数值。 屏幕比这个小得多。 随着面板高度增加到如此高的尺寸。您可以看到,使用滚动条将变得非常明智。。这不是一件好事

滚动大小为2x、3x、5x的内容可供用户使用。但是,滚动高度至少为(32768)的内容(使用高分辨率监视器,最大化窗口)在最佳情况下是窗口大小的32倍是非常不舒服的

另外,我相信,由于大脑难以在越来越多的“事物”集合中定位“事物”,用户的生产力将会下降。

从我上面的评论(这里似乎真的是个问题):


如果试图使用16位范围以外的坐标,WinForms(以及一般的GDI)的行为通常是不可预测的。尽量避免这样。在可能出现的问题范围中,有一些根本没有绘制出来,在意外的代码位置出现溢出异常等。

Int16.MaxValue=32767
-可能是根本原因?@Martin:我想得很对,但这并不能解释为什么在调整表单大小后控件的布局是正确的。嗯,这是个好问题,但这种设计听起来像是资源溢出的处方。我不相信窗户(把手等)的设计能容纳这么多的分配。我在这里并不感到惊讶。如果试图使用16位范围以外的坐标,WinForms(以及一般的GDI)的行为通常是不可预测的。马丁:请看下面我的(略作扩展的)答案。理想情况下,这似乎是最好的办法。然而,在估计这些变化的影响时,我实际上希望有一个更简单的解决方案。