Предположим, что у наших 139 меток есть текст "label-xxx", где xxx - это число, и мы ищем "label-121" и хотим сделать его красным:
var c = this.Controls.FirstOrDefault(ctrl => ctrl is Label && ctrl.Text == "label-121");
if(c == null) {
//put code here to handle the scenario where the label is not found
} else {
c.BackColor = Color.Red;
}
Обратите внимание, что "это "относится к самой форме.Если ваши метки находятся внутри панели, группового блока и т. Д., Необходимо перечислить элементы управления этой панели, а не форму, потому что это иерархия.Если метки находятся на нескольких разных панелях, пожалуйста, сообщите, потому что вам нужен другой способ их циклического повторения
Нам на самом деле не нужно приводить наш элемент управления к метке, потому что свойства Text и BackColor вводятся виерархия наследования на уровне управления, а не подкласс метки.Если вы хотите изменить другие свойства, имеющие только метку, вам придется преобразовать c
в метку
. Думаю, вам лучше объявить Dictionary<string, Label>
и заполнить егонадписи как они помещены в форму (или заполняют ее из коллекции Controls) - если тексты надписей не меняются, это будет более чистый способ их отслеживания
Как правило, получение Linq работаетпросто добавив using System.Linq;
вверху файла с остальным кодом в. System.Linq является членом сборки System.Core.Если в вашем проекте нет ссылки на него, вы можете увидеть ошибки, связанные с тем, что он является неизвестным пространством имен
Вот не-linq версия кода:
foreach(Control c in this.Controls)
{
if(c is Label && c.Text == "label-121")
{
c.BackColor = Color.Red;
}
}