Как найти вид по тегу? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть Form, который содержит несколько TableLayoutPanel (панелей списка), которые я создаю динамически.

Каждый TableLayoutPanel имеет уникальный тег. На самом деле каждая панель имеет Lable, а эта Lable имеет Name = "lable_name"

Мне нужно обновить этот точный Label внутри TableLayoutPanel.

public void UpdateLable(string tag, string newText)
        {
            foreach(var tlp in Views)
            {
                if (tlp.Tag.ToString().Equals(tag))
                {
                    var lable = tlp.findViewByName("lable_name") as Label;
                    lable.Text = newText;
                }
            }
        }

Но я могу ' t find метод вроде findViewByName()

Итак, вопрос в том, как найти представление по имени?

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Создайте метод, как показано ниже

public static IEnumerable<Control> GetControlsOfType<T>(Control control)
{
    var controls = control.Controls.Cast<Control>();
    return controls.SelectMany(ctrl => GetControlsOfType<T>(ctrl)).Concat(controls).Where(c => c is T);
}

Используйте его как

Var control= GetControlsOfType<Label>(yourView).FirstOrDefault(x => x.Tag == tag);

if(control != null)
   control.Text = newText
1 голос
/ 19 марта 2020

в классе TableLayoutPanel такого метода нет. Но у каждого Control есть свойство Controls - коллекция дочерних элементов управления.

, что в специализированной коллекции есть Find метод, который позволяет получить дочерний элемент по имени:

var label = tlp.Controls.Find("lable_name", true)[0] as Label;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...