【发布时间】:2010-10-09 22:14:33
【问题描述】:
我制作了一个自定义控件,它是一个 FlowLayoutPanel,我在其中放入了一堆其他自定义控件(只是按钮,每个都有三个标签和一个图片框覆盖)
大约 100 个按钮可以正常工作,但如果增加到 1000 个按钮,就会遇到麻烦。将其提高到 5000,它会在 20 秒后死亡。
我的自定义代码很少,我明智地使用了暂停和恢复布局。
那我做错了什么?我确信我的(相当快速的)计算机应该能够处理几千个按钮和标签。
(我对 C# GUI 的东西还很陌生,所以也许我应该做一些完全不同的事情。)
编辑 1:
这几乎是目前唯一的自定义代码:
flowLayoutPanel1.SuspendLayout();
foreach (DataRow row in dt.Rows) // dt is from a DB query
{
flowLayoutPanel1.Controls.Add(new PersonButton(row));
}
flowLayoutPanel1.ResumeLayout();
在 PersonButton 构造函数中:
this.label1.Text = row["FirstName"].ToString().Trim() + " "
+ row["Surname"].ToString().Trim();
(应该还附上一张图片,但我不确定是否有人能看到。)
编辑 2:
我想我真的应该使用 DataGridView 或 ListView,但我想要的不仅仅是一行文本和每行一个小图标;我希望它看起来类似于 Firefox 中的下载视图(Ctrl + J)。 (见截图)
非常感谢您的所有意见,顺便说一句。我想我得重新考虑......
alt text http://img156.imageshack.us/img156/1057/capture.png
【问题讨论】:
-
您确定这是自定义控件,而不是用户控件吗?听起来您制作了一个用户控件。
-
你做错了什么?您正在创建数千个控件。可能有更好的方法来做你想做的事情。
-
“那我做错了什么?”在表单上显示 1000 个按钮。
-
尝试使用页面导航概念
标签: c# optimization user-controls