【发布时间】:2015-06-23 05:26:47
【问题描述】:
我编写了一个程序,从 txt 文件构造一个 2D 矩阵,并构建一个带有 X*Y 标签的 winforms 面板,其中包含一个字符、坐标、颜色和边框(如果选择它)。 这是我的 DrawGrid 例程:
Container.SuspendLayout();
for (int y = 0; y < template.Matrix.GetLength(1); y++)
{
for (int x = 0; x < template.Matrix.GetLength(0); x++)
{
var curLabel = new LabelTemplate(template.Matrix[x, y].Content, x, y, spacing);
_templateCells.Add(curLabel);
Container.Controls.Add(curLabel);
}
}
Container.ResumeLayout();
我在我的表单中查看一个 txt 文件,然后用鼠标选择一行或列或区域,从中操作并保存新的文本文件,从我的 LabelTemplate 对象获取内容和坐标(扩展标签)。
我总是在输入中输入一些 txt 文件来测试我的程序。 今天我用一个大的 txt 文件(9000 行 * 50 列)进行了测试,我已经达到了 windows 窗体应用程序的最大句柄。 (在 Container.Controls.Add(curLabel) 期间启动 Win32 异常)。 谷歌搜索我发现winforms应用程序中的控件限制是10000个句柄。
还在我的表单上查看很多标签(如果 10000 是可修改的值),性能非常糟糕(如果我滚动容器面板,我会等待很多时间才能查看结果)! 有一种方法或控制可以帮助我吗? 我也认为 GDI+,但什么是适合你的方法?有什么建议吗?
提前致谢
【问题讨论】:
-
我可以推荐你使用一些 Grid 控件,例如 WinForms DataGridView
-
我明白了,我已经尝试过使用 DataGridView(也在虚拟模式下),一切都很好。但现在我必须重新编写所有代码以适应 DataGridView。这是一项艰巨的工作,我只想在我的控制容器中添加超过 10.000 个标签。有办法吗?