[英]How to change property of usercontrol dynamically in loop
1我有问题要循环使用usercontrol。 换句话说,我想更改usercontrols属性,但我不能。 因此,我有一个名为ucProperty的用户控件,并且其中有许多标签。 我已经以不同的方式调用了它们,例如LblNameModel , LblImageName ,...在我的表单中,有许多用户控件-ucProperty1,2,.8 ,现在我想动态且循环地更改其属性( LblNameModel,LblImageName .. ) 。 。 我尝试这样:
int i = 1;
foreach (Control contrl in this.Controls)
{
if (contrl.Name == ("ucProperty" + i.ToString()))
{
contrl.LblNameModel = "Model" + i.ToString();
contrl.LblImageName = "image" + i.ToString() + ".jpg";
i++;
}
}
在此处输入图片描述 LblNameModel不被接受
但它不起作用。 我的问题是控制后的属性为LblNameModel 。 不接受编程。 如何更改循环中的属性
在我的用户控件ucProperty
有以下代码:
public string LblNameModel
{
get { return lblNameModel.Text; }
set { lblNameModel.Text = value; }
}
您必须过滤并转换为用户控件
using System.Linq;
...
foreach (var uc in this.Controls.OfType<MyUserControlType>())
{
string number = uc.Name.SubString("ucProperty".Length);
uc.LblNameModel = "Model" + number;
uc.LblImageName = "image" + number + ".jpg";
}
如果仅循环浏览控件,则会得到一个键入为Control
的循环变量,并且您将无法访问特定于您的用户控件的属性。 OfType<T>
扩展方法(名称空间System.Linq
)同时进行过滤和强制转换。
我假设所有这些用户控件都命名为ucProperty<number>
。 否则添加支票
if (uc.Name.StartsWith("ucProperty"))
请注意,如果用户控件的显示顺序不正确,则使用i
的方法会出现问题。 即,如果foreach
产生"ucProperty4"
但i
为3
则将跳过此控件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.