动态生成控件,耗费资源,如何解决? UBB 内容存入剪贴板 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /// 动态创建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(); } 是还是和原来一样,有窗体挡上面,移开时会很明显的重绘效果。我的事件只有 public Form1() { InitializeComponent(); CreateButton(); }中使用 public Form1() { InitializeComponent(); this.DoubleBuffered = true; } this.DoubleBuffered = true;已经设置过了 没有什么好办法了。100多个控件放在一个界面上,当然是会慢了。试试别的办法吧。例如:绘图把你要的数据绘制到窗体上去,并且用list记下位置和大小,当鼠标在那个区域时,执行相应的代码。 100多个不是问题,本人试过1\定义一个Panel数组,PANEL的尺寸设置成需要的大小,数组在大小同数据库的字段数量2\在每个Pnael上创建控件,比如 先是LABEL ,再是TEXTBOX 或COMBOBOX之类可输入控件,然后是BUTTON等3\在FlowLayoutPanel上添加PANEL数控件4\运行时绑定数据我的据库中有一个表有60多个字段,运行时整整一屏,加上导航工具条也是动态生成的,窗体也是动态生成的,只是在初始化时CPU使用率高一点,其它切换窗体没有出现楼主所说的现象,是不是楼主在其它代码中重新初始化了 你在这些panel上有加背景图吗?我不加图时是没问题,挺快。但有图时就会出现重绘现象 c#正则表达式问题,求大神..... 抓取网页动态内容 关于MVC中调用一段JS代码 请高手指教.net中遇到的问题 请各位高手帮帮小女子 如何用波形图显示网络流量(C#.NET实现) 关于Replace如何使用正则表达式替换? 在vs2005中,怎样才能禁止 textbox 中的鼠标右键粘贴? 现有系统中想放弃.NET REMOTING,没有足够理由不让我放弃... 请教各位老师:关于C#调用C++中返回结构体的DLL的一些问题。 如何在C#的一个页面类获取任意一个页面的对象? C#C++读取文件
/// 动态创建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();
}
我的事件只有
public Form1()
{
InitializeComponent();
CreateButton();
}中使用
{
InitializeComponent();
this.DoubleBuffered = true;
}
已经设置过了
100多个控件放在一个界面上,当然是会慢了。
试试别的办法吧。
例如:绘图把你要的数据绘制到窗体上去,并且用list记下位置和大小,
当鼠标在那个区域时,执行相应的代码。
2\在每个Pnael上创建控件,比如 先是LABEL ,再是TEXTBOX 或COMBOBOX之类可输入控件,然后是BUTTON等
3\在FlowLayoutPanel上添加PANEL数控件
4\运行时绑定数据我的据库中有一个表有60多个字段,运行时整整一屏,加上导航工具条也是动态生成的,窗体也是动态生成的
,只是在初始化时CPU使用率高一点,其它切换窗体没有出现楼主所说的现象,是不是楼主在其它代码中重新初始化了