首页 新闻 赞助 找找看

关于winform循环生成控件的问题

0
悬赏园豆:100 [已解决问题] 解决于 2012-06-03 10:14

   for (int i = 0; i < 8; i++)
            {
                Label a = new Label();
                a.Width = 50;
                a.Location =new System.Drawing.Point(20,i*20);              
            }

我做了一个ping服务器的软件,每一台服务器的ip我启动一个线程去ping 然后ping返回的响应时间作为 lable的长度  ,我可以生成一次清空一次 ,但这样我觉得很浪费 每次都要 new一个label,我觉得服务器比如说5个那个就有5个label对应,我精确定位没个label就改变其长度就可以了,但是问题自动生成的lanbel该如何获取他们的 名字呢 比如上面的a又不能用i来作为label的名字,有谁有思路吗?下面是代码

 for (int i = 1; i < 4; i++)
            {
                ParameterizedThreadStart ts = new ParameterizedThreadStart(new cl(Calculate));
                Thread td = new Thread(ts);
                MyThreadParameter paramter = new MyThreadParameter("www.baidu.com", i.ToString());              
                td.Start(paramter);
            }         //四个线程启动

 public void Calculate(object ms)
        {
            MyThreadParameter parameter = ms as MyThreadParameter;
            while (true)
            {                                 
                int a = ping(parameter.Interval);//这个是传递过来的IP
                //this.BeginInvoke(new o(other));  //写到ping后再清空groupbox,因为ping会延迟返回值。如果先清空groupbox会造成ping的这段时间label没有显示
                this.BeginInvoke(new changeText(CalcFinished), a.ToString(), parameter.LoopCount);
                Thread.Sleep(2000);
            }
        }

//根据每个IP的响应时间 做label的长度

 public void CalcFinished(string result, string id)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new changeText(CalcFinished), result);
            }
            else
            {
                //this.groupBox1.Controls.Clear();
                Label textBox1 = new Label();
                textBox1.BackColor = System.Drawing.Color.Red;
                textBox1.Location = new System.Drawing.Point(20, Convert.ToInt32(id)*40);
                textBox1.Text = result;
                textBox1.Width = Convert.ToInt32(result) / 10;
                this.groupBox1.Controls.Add(textBox1);
            }
        }

 

 

软件界面就是

www.baidu.com    label

www.....               label

www............       label

label 如上每两秒ping一次返回响应时间作为label的长度更新前面服务器对应的lable

如我上面缩写的一次只能显示一个label 因为我要清空groupbox来显示新的label  如果我有lable的name我就直接改变他的长度  而不用去清空 再new 了

//以上代码是部分代码  还有许多命名不正确的 以及多余没用的大家不用管,我复制过来的,改了很多次我没删 能成功运行的 看着不舒服而已

keeppuching的主页 keeppuching | 初学一级 | 园豆:6
提问于:2012-06-03 01:28
< >
分享
最佳答案
0

label有name的可以循环查找控件然后 获取name对比   做出来了

keeppuching | 初学一级 |园豆:6 | 2012-06-03 10:10
其他回答(1)
0

对Label编程可以设置很多属性的,参考:http://msdn.microsoft.com/en-us/library/system.windows.forms.label.aspx

收获园豆:100
artwl | 园豆:16736 (专家六级) | 2012-06-03 08:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册