2016-03-24 3 views
1

Ich habe eine Basisform mit einem BindingSource darauf. Ich habe eine zweite Form, die von der Basisform erbt, und diese zweite Form hat zusätzliche 5 Bindungsquellen.Wie bekomme ich alle Bindungsquellen auf einem Formular

Ich möchte die Liste der Bindungsquellen, die ich in der zweiten Form (dh 6) habe.

Also, in der OnLoad der Basenform, habe ich zunächst versucht:

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

Aber ich habe nur die Binding der Grundform. Dann habe ich versucht:

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

, die auch die gleiche Bindingsource zurückgibt.

Doing in der der Basisform sollte funktionieren, weil ich alle Steuerelemente der zweiten Form erhalten kann.

Allerdings kann ich nicht scheinen, die verbindlichen Quellen der zweiten Form zu bekommen.

Also, was ist der richtige Weg, sie aufzulisten?

Antwort

0

Mit der Antwort von Find components on a windows form c# (not controls) wurde die akzeptierte Antwort Rückkehr einige Steuerelemente, so fügte ich einen Scheck für die Eigenschaft Name (die Komponenten zur Laufzeit nicht haben):

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; 
}