c# - Windows.Forms.Panel 32767 大小限制

标签 c# .net winforms

我有一个使用 Windows.Forms.Panel 来显示图片列表的应用程序。当面板的高度超过 32767 像素时,其余内容将被截断。

例子:

Windows.Forms.Panel myPanel;

ArrayList pictureList;

foreach(pic in pictureList) {
    myPanel.Controls.Add(pic) // adds all the objects without complaints
}

在这个例子中,所有元素都被添加到面板中而不会抛出错误,但在面板达到 32767 的大小后,不再显示图像。

我的问题:是否有可能打破这个限制并在面板中显示更多内容?

我知道这种方法无论如何都不方便,但现在没有时间重新设计整个应用程序。

最佳答案

这是 Windows 中的架构限制。指示窗口中位置的各种消息(如 WM_MOUSEMOVE)以 32 位整数报告位置,其中 16 位用于 X,16 位用于 Y 位置。因此,您不能创建大于 short.MaxValue 的窗口。这并不是一个真正的问题,没有人拥有比 32,767 像素更宽的显示器,而且在很长一段时间内都不会出现。

您必须以不同的方式执行此操作。就像在 Paint 方法中使用 Graphics.TranslateTransform() 一样。

关于c# - Windows.Forms.Panel 32767 大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064678/

相关文章:

.net - 如何停止Backgroundworker并关闭表单?

c# - 在主 ViewModel 中引入对 DI 容器的引用是设计缺陷吗?

c# - 我可以在后台线程中使用 Screen 类吗?

c# - 有没有办法从 asp .net web 方法而不是 JSON 格式返回 ISO 格式的 DateTime?

c# - .NET 中的字符串拆分器

.net - 在控制台应用程序中,有没有办法检测 StandardInput 何时可用?

c# - 我在哪里可以找到有关创建线程时幕后发生的事情的信息?

c# - 为什么 LINQ to Entities 不能识别某些方法?

c# - 我想了解 @Html.DisplayFor(modelItem => item.FirstName) 中的 lambda 表达式

c# - 编码的 UI 测试 - 单击控件基于表行上的其他内容