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 了
//以上代码是部分代码 还有许多命名不正确的 以及多余没用的大家不用管,我复制过来的,改了很多次我没删 能成功运行的 看着不舒服而已
label有name的可以循环查找控件然后 获取name对比 做出来了
对Label编程可以设置很多属性的,参考:http://msdn.microsoft.com/en-us/library/system.windows.forms.label.aspx