Вы должны фильтровать и приводить к вашим элементам управления
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
, то этот элемент управления будет пропущен.