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

问题描述 投票:0回答:1

1我有问题,我将在循环中使用usercontrol。换句话说,我想改变usercontrols属性,但我不能。所以我有一个名为ucProperty的usercontrol,里面有许多标签。我已经调用了所有这些,例如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++;
   }
}

qazxsw poi LblName Model不被接受

但它不起作用。我的问题是控制后的属性为LblName Model。不接受编程。我如何在循环中更改属性

在我的usercontrol enter image description here中有代码:

ucProperty

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

c# user-controls
1个回答
1
投票

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

this is next result

如果只是遍历控件,则会得到一个类型为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则将跳过此控件。

© www.soinside.com 2019 - 2024. All rights reserved.