如何在表单上获取所有绑定源

时间:2016-03-24 16:32:51

标签: c# winforms bindingsource

我有一个基本表单,上面有一个BindingSource。我有一个继承自基本表单的第二个表单,第二个表单还有另外5个绑定源。

我想获得第二种形式的绑定源列表(即6)。

所以,在基本形式的OnLoad中,我首先尝试了:

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

但我只获得了基本表单的bindingsource。然后我试了一下:

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

其中也返回相同的bindingsource。

在基本表单的OnLoad中执行上述操作应该有效,因为我可以获得第二种表单的所有控件。

但是,我似乎无法获得第二种形式的绑定来源。

那么列出它们的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

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