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

时间:2019-01-13 20:37:12

标签: c# user-controls

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++;
   }
}

enter image description here LblNameModel不被接受

但是它不起作用。我的问题是 contrl之后的属性作为LblNameModel。 不接受编程。 如何更改循环中的属性

并且在我的用户控件ucProperty中有以下代码:

public string LblNameModel
{
    get { return lblNameModel.Text; }
    set { lblNameModel.Text = value; }
}

this is next result

1 个答案:

答案 0 :(得分:1)

您必须过滤并转换为用户控件

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,则此控件将被跳过。