c#中如何给Label动态赋值?

我有一个form,form上有若干个Label,label的值我从后台循环取,然后赋值假设我有两个label要赋值,我也知道这两个label的名称,但是有什么办法能动态的... 我有一个form,form上有若干个Label,label的值我从后台循环取,然后赋值
假设我有两个label要赋值,我也知道这两个label的名称,但是有什么办法能动态的根据这个label名称.text的方式把值赋上去?不能写死,或者如果有其他的赋值思路也可以提供下,跪等
展开
 我来答
百度网友ce7f3ccb4
2015-03-31 · TA获得超过1950个赞
知道大有可为答主
回答量:2299
采纳率:0%
帮助的人:1902万
展开全部
如果你的lable名称唯一,同时的确存在的话,可以直接用以下方式
this.Controls.Find("Lable名称", false)[0].Text="value";
如果不知道存不存在
Control[] Cons=this.Controls.Find("Lable名称", false);
如果Cons的数量为0 就是没有 不为0 就是有
第2种方式,
this.Controls.OfType<Label>();
返回所有的lable集合,然后遍历就是了。
需要说明的是,this代表的是比lable的直接父级哈!
追问

我有一块窗体,红色lable部分显示我会起一个子线程实时去刷新改变其显示值的,如果是lable 名称写死那我没有问题了,每次我就去刷新这些lable就好,但现在有问题是将来会有配置界面让用户勾选到底要显示哪些label,用户所勾选的lable名称我在线程中可以拿到,但现在问题就是如何能根据lable名称再得到lable对象进行赋值? 用户勾选的lable与实际界面展示的lable.name同名

追答
我在上面的回答你还没看懂么?
难道还要我这样给你写你才明白吗?
Lable lable=(lable)groupBox1.Controls.Find("Lable名称", false)[0];
lable.Text="666";

Lable名称就是你知道的某一个lable控件的name属性。
比如你有个Lable的名称为 label_zf,用户是不是勾选了,你自己去判断哈
然后我们去找这个Lable控件
Lable lable=(lable)groupBox1.Controls.Find("label_zf", false)[0];
lable.Text="666";//这就是你想要的那个对象啊。
lable.Enable=true;
lable.......干什么不行啊!!
这个lable对象就是你的label_zf对象!
冉MLiang
推荐于2017-10-07 · TA获得超过222个赞
知道小有建树答主
回答量:393
采纳率:71%
帮助的人:171万
展开全部
你所谓的动态赋值不是很明白你要表达的意思。
我想你是不是想说有若干个Label要赋值。但是不要一个个赋值根据这个label名称.text的方式值赋。你可以new一个 Label类型的数组,把所有Label加到数组作为数组元素。然后通过for循环赋值。
追问

我有一块窗体,红色lable部分显示我会起一个子线程实时去刷新改变其显示值的,如果是lable 名称写死那我没有问题了,每次我就去刷新这些lable就好,但现在有问题是将来会有配置界面让用户勾选到底要显示哪些label,用户所勾选的lable名称我在线程中可以拿到,但现在问题就是如何能根据lable名称再得到lable对象进行赋值? 用户勾选的lable与实际界面展示的lable.name同名

追答

你可以在每一个要显示Label控件的地方先添加一个Panel作为容器,调整好大小和位置。

然后通过代码动态添加你需要的Label控件到Panel控件上就行了。

大概原理就是这样,我觉得杨改可以实现你想要的效果。

为了跟好地让你理解我的这套原理,我做了一个小实例来帮我阐释,我想你看了代码和运行效果后应该会有所启发。(实例程序见附件压缩包)

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiangjuan314
2016-01-04 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2872万
展开全部
Labelname.Text=“内容”;
放到线程中去执行,不要把主线程阻塞了。你的while循环太长的话会造成界面线程假死。
首先在form的load事件中加入一下内容:
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
//使用另外的线程启动showit函数显示内容
Thread t = new Thread (showit);
t.Start();
}
void showit()
{
int i = 0;
while (i <=10000)
{
label.Text = i;
i++;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
内裤最大功能
2015-03-31 · TA获得超过3105个赞
知道大有可为答主
回答量:3202
采纳率:79%
帮助的人:486万
展开全部
估计是想让label的值定时变动吧。
设计界面拖一个timer控件过来。你网上学一下timer的用法,挺简单的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞冰鱼1
2015-03-31 · TA获得超过147个赞
知道小有建树答主
回答量:296
采纳率:80%
帮助的人:147万
展开全部
循环form内的lable吧,这样可以试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式