поиск имени метки на основе текста, соответствующего переменной - PullRequest
0 голосов
/ 22 сентября 2019

в Visual studio в C # winform У меня есть сетка из 139 меток, каждая из которых отображает уникальное текстовое значение - как мне изменить цвет одной из этих меток, когда переменная соответствует одному из свойств label.text, не знаякакой ярлык это

, например, я щелкаю строку таблицы данных, и она устанавливает переменную для кода GG, как мне найти, какая метка в сетке имеет свойство text = GG, а затем изменить цвет этоготолько метка

сетка находится на странице управления вкладками, поэтому она также должна обновляться на правильной вкладке (активной)

завершить новичка, пытающегося решить проблему

заранее спасибо

1 Ответ

1 голос
/ 22 сентября 2019

Предположим, что у наших 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...