Как динамически изменить свойство usercontrol в цикле - PullRequest
0 голосов
/ 13 января 2019

1 У меня проблема с тем, что я собираюсь работать с usercontrol в цикле. Другими словами, я хочу изменить свойство usercontrols, но я не могу. Итак, у меня есть usercontrol с именем 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++;
   }
}

введите описание изображения здесь LblNameModel не принимается

Но это не работает. Моя проблема заключается в свойствах как LblNameModel после contrl. не принято для программирования. Как я могу изменить свойства в цикле

и в моем пользовательском контроле ucProperty есть код:

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

это следующий результат

1 Ответ

0 голосов
/ 13 января 2019

Вы должны фильтровать и приводить к вашим элементам управления

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, то этот элемент управления будет пропущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...