2016-03-24 2 views
1

У меня есть базовая форма с одним BindingSource на нем. У меня есть вторая форма, которая наследуется от базовой формы, и эта вторая форма имеет дополнительные 5 источников привязки.Как получить все bindingsources на форме

Я хочу получить список источников привязки, которые у меня есть во второй форме (т.е. 6).

Так, в OnLoad основной формы, я впервые попробовал:

var list = this.Controls.OfType<BindingSource>(); 

Но я получил только BindingSource базовой формы. Затем я попробовал:

var List = (from Component bs in this.components.Components 
      where bs is BindingSource 
      select bs); 

Который также возвращает тот же источник связывания.

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

Однако я не могу получить источники привязки второй формы.

Итак, каков правильный способ их перечислить?

ответ

0

Используя ответ от Find components on a windows form c# (not controls), принятый ответ возвращался некоторые элементы управления, поэтому я добавил проверку свойства Name (какие компоненты не имеют во время выполнения):

private IEnumerable<Component> EnumerateComponents() { 
    return from field in GetType().GetFields(
       BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) 
     where typeof(Component).IsAssignableFrom(field.FieldType) 
     let component = (Component)field.GetValue(this) 
     where component != null 
     where component.GetType().GetProperty("Name") == null 
     select component; 
} 
Смежные вопросы