动态生成控件,耗费资源,如何解决?

sharda 2010-08-21 09:16:42
动态创建button时,当跑起来后,只要有窗体挡在FORM上,移开后,发现系统页面重绘时,就会明显感觉到重新刷新的感觉,
看了一下进程。就在那个瞬间CPU跑到了100%,资源耗费很大,请问如何解决,以下是代码。另外,要是把这些button加在一个panel上,问题更严重,又该如何解决?
 /// 动态创建button
/// </summary>
// bool b = false;
private void CreateButton()
{

// b = true;
// this.Controls.Clear();
//Variety var = new Variety();
// var.StrNO = "111111";
// DataTable dt = VarietyDAL.GetDataTable(var);
int x = 35;
int y = 25;
for (int i = 0; i < 100; i++)
{
Button btn = new Button();

btn.Size = new System.Drawing.Size(75, 69);

btn.Name = i.ToString();
btn.Text = i.ToString();
//动态创建X,Y坐标,满屏时跳下一行
btn.Location = new System.Drawing.Point(x, y);
if (x > 1024)
{
x = 35;
y += 75;
btn.Location = new System.Drawing.Point(x, y);

}
x += btn.Width + 35;



this.Controls.Add(btn);

}



}
...全文
200 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharda 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lhblxm 的回复:]
100多个不是问题,本人试过

1\定义一个Panel数组,PANEL的尺寸设置成需要的大小,数组在大小同数据库的字段数量
2\在每个Pnael上创建控件,比如 先是LABEL ,再是TEXTBOX 或COMBOBOX之类可输入控件,然后是BUTTON等
3\在FlowLayoutPanel上添加PANEL数控件
4\运行时绑定数据

我的据库中有一个表有60多个字段,运行时整整一屏……
[/Quote]
你在这些panel上有加背景图吗?我不加图时是没问题,挺快。但有图时就会出现重绘现象
ZengHD 2010-08-21
  • 打赏
  • 举报
回复


public Form1()
{
InitializeComponent();
this.DoubleBuffered = true;
}
sharda 2010-08-21
  • 打赏
  • 举报
回复
是还是和原来一样,有窗体挡上面,移开时会很明显的重绘效果。
我的事件只有
public Form1()
{
InitializeComponent();
CreateButton();
}中使用
sharda 2010-08-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zenghd 的回复:]
C# code

/// 动态创建button
/// </summary>
// bool b = false;
private void CreateButton()
{

// b = true;
// this.Controls.Clear()……
[/Quote]还是会刷
ZengHD 2010-08-21
  • 打赏
  • 举报
回复

/// 动态创建button
/// </summary>
// bool b = false;
private void CreateButton()
{

// b = true;
// this.Controls.Clear();
//Variety var = new Variety();
// var.StrNO = "111111";
// DataTable dt = VarietyDAL.GetDataTable(var);
int x = 35;
int y = 25;

this.SuspendLayout();
Button[] buttons = new Button[100];
for (int i = 0; i < 100; i++)
{
buttons[i] = new Button();

buttons[i].Size = new System.Drawing.Size(75, 69);

buttons[i].Name = i.ToString();
buttons[i].Text = i.ToString();
//动态创建X,Y坐标,满屏时跳下一行
buttons[i].Location = new System.Drawing.Point(x, y);
if (x > 1024)
{
x = 35;
y += 75;
buttons[i].Location = new System.Drawing.Point(x, y);

}
x += buttons[i].Width + 35;

}

this.Controls.AddRange(buttons);
this.ResumeLayout();
}
dancingbit 2010-08-21
  • 打赏
  • 举报
回复
如果这个方法只是调用一次的话,再消耗资源也只是创建的那一次。
如果每次窗体刷新的时候都出现这种情形的话,可能就是其他地方的代码问题。
sharda 2010-08-21
  • 打赏
  • 举报
回复
主要是要实现动态创建的功能,因为到时是从数据库里取值来生成的。
wuyq11 2010-08-21
  • 打赏
  • 举报
回复
减少动态创建,用户控件
zlcp520 2010-08-21
  • 打赏
  • 举报
回复
UBB 内容存入剪贴板
sharda 2010-08-21
  • 打赏
  • 举报
回复
是winform的,不是web的。
whb147 2010-08-21
  • 打赏
  • 举报
回复
还不如构造html呢
lhblxm 2010-08-21
  • 打赏
  • 举报
回复
100多个不是问题,本人试过

1\定义一个Panel数组,PANEL的尺寸设置成需要的大小,数组在大小同数据库的字段数量
2\在每个Pnael上创建控件,比如 先是LABEL ,再是TEXTBOX 或COMBOBOX之类可输入控件,然后是BUTTON等
3\在FlowLayoutPanel上添加PANEL数控件
4\运行时绑定数据

我的据库中有一个表有60多个字段,运行时整整一屏,加上导航工具条也是动态生成的,窗体也是动态生成的
,只是在初始化时CPU使用率高一点,其它切换窗体没有出现楼主所说的现象,是不是楼主在其它代码中重新初始化了
mjp1234airen4385 2010-08-21
  • 打赏
  • 举报
回复
没有什么好办法了。
100多个控件放在一个界面上,当然是会慢了。
试试别的办法吧。
例如:绘图把你要的数据绘制到窗体上去,并且用list记下位置和大小,
当鼠标在那个区域时,执行相应的代码。
sharda 2010-08-21
  • 打赏
  • 举报
回复
this.DoubleBuffered = true;
已经设置过了
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧