繁体   English   中英

如何动态地更改用户控件的属性

[英]How to change property of usercontrol dynamically in loop

1我有问题要循环使用usercontrol。 换句话说,我想更改usercontrols属性,但我不能。 因此,我有一个名为ucProperty的用户控件,并且其中有许多标签。 我已经以不同的方式调用了它们,例如LblNameModelLblImageName ,...在我的表单中,有许多用户控件-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"i3则将跳过此控件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM