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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在循环中动态更改用户控件的属性相关的知识,希望对你有一定的参考价值。

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

答案

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

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

以上是关于如何在循环中动态更改用户控件的属性的主要内容,如果未能解决你的问题,请参考以下文章

当通过网络接收的数据更改属性时,如何将控件绑定到属性更改?

如何在 Vs Code 中更改默认自动选择的用户片段行为

如何在ms-access vba中单击命令按钮单击以更改代码以更改控件属性

如何动态加载用户控件?

删除或隐藏动态创建的链接标签和标签

显示/隐藏片段并以编程方式更改可见性属性