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; }
}
答案 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"
但i
是3
,则此控件将被跳过。