2012-03-02 3 views
0

Я хочу найти ярлык во время выполнения, это правильный способ сделать это?Правильный способ найти элемент управления во время выполнения

Control[] control; 
Label label; 

control = this.Controls.Find(labelToChange, false); 
label = (Label)control[0]; 

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

ответ

1

Это правильный метод использования.

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

Итак:

  1. Если вы можете гарантировать, что там будет только когда-либо один контроль виден в любой момент ваш код ОК.
  2. Если их может быть больше одного, вам необходимо перебрать все элементы управления, которые возвращаются, и либо выполнить одно и то же действие для каждого, либо добавить еще какой-нибудь код для разработки, который вы действительно хотите.
+0

Atleast они обеспечивают простой способ для автоматического перебора throu всех дочерних элементов управления. У Asp.net этого не было. – TheGateKeeper

1

Основная идея в LINQ:

Label label; 

var c = from x in Controls.Find("labelToChange", false) 
    where x.GetType() == typeof(Label) 
    select x; 

label = (Label)c.FirstOrDefault(); 
+0

Спасибо, но я никогда не использовал Linq – TheGateKeeper

Смежные вопросы