Используя LINQ, как вы получаете все элементы управления метками - PullRequest
1 голос
/ 07 апреля 2010

Я хочу получить коллекцию всех элементов управления метками, которые являются частью пользовательского элемента управления. У меня есть следующий код:

        var labelControls = from Control ctl in this.Controls
                            where ctl.GetType() == typeof(Label)
                            select ctl;

но результат равен нулю.

Пожалуйста, помогите. Спасибо.

Редактировать Я также попробовал следующий код безуспешно.

        this.Controls
            .OfType<Label>()
            .Where(ctl => ctl.ID.Contains("myPrefix"))
            .ToList()
            .ForEach(lbl => lbl.ForeColor = System.Drawing.Color.Black);

Опять без успеха.

Ответы [ 3 ]

5 голосов
/ 07 апреля 2010

Вы уверены, что элемент управления, чьи дочерние элементы, которые вы анализируете, на самом деле непосредственно содержит элементы Label? Я подозреваю, что это дочерний элемент основного элемента управления, на котором размещаются метки, и в этом случае вам нужно рекурсивно искать в дереве пользовательского интерфейса, чтобы найти метки.

Что-то вроде:

public static IEnumerable<Label> DescendantLabels(this Control control)
{
   return control.Controls.DescendantLabels();
}

public static IEnumerable<Label> DescendantLabels(this ControlCollection controls)
{
    var childControls = controls.OfType<Label>();

    foreach (Control control in controls)
    {
       childControls = childControls.Concat(control.DescendantLabels());
    }

    return childControls;
}
2 голосов
/ 07 апреля 2010

Controls.OfType<Label>() - вот и все

Для вложенных элементов управления

public static class ext
{
    public static List<Label> GetLabels(this Control control)
    {
        var chList = control.Controls.OfType<Label>().ToList();
        chList.AddRange(((IEnumerable<Control>)control.Controls)
              .SelectMany(c => c.GetLabels()));
        return chList;
    }
}
0 голосов
/ 07 апреля 2010
var labelControls = this.Controls.OfType<Label>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...