如何获取表单上的所有绑定源
How to get all bindingsources on a form
我有一个基本表格,上面有一个 BindingSource
。我有第二种形式继承自基本形式,第二种形式有另外 5 个绑定源。
我想获取第二种形式(即 6)中的绑定源列表。
所以,在基本形式的OnLoad
中,我首先尝试:
var list = this.Controls.OfType<BindingSource>();
但我只得到了基本表单的绑定源。然后我试了:
var List = (from Component bs in this.components.Components
where bs is BindingSource
select bs);
这也 returns 相同的绑定源。
在基本表单的 OnLoad
中执行上述操作应该可行,因为我可以获得第二种表单的所有控件。
但是,我似乎无法获取第二种形式的绑定源。
那么列出它们的正确方法是什么?
使用 Find components on a windows form c# (not controls) 的答案,接受的答案返回了一些控件,因此我添加了对名称 属性 的检查(哪些组件在运行时没有):
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;
}
我有一个基本表格,上面有一个 BindingSource
。我有第二种形式继承自基本形式,第二种形式有另外 5 个绑定源。
我想获取第二种形式(即 6)中的绑定源列表。
所以,在基本形式的OnLoad
中,我首先尝试:
var list = this.Controls.OfType<BindingSource>();
但我只得到了基本表单的绑定源。然后我试了:
var List = (from Component bs in this.components.Components
where bs is BindingSource
select bs);
这也 returns 相同的绑定源。
在基本表单的 OnLoad
中执行上述操作应该可行,因为我可以获得第二种表单的所有控件。
但是,我似乎无法获取第二种形式的绑定源。
那么列出它们的正确方法是什么?
使用 Find components on a windows form c# (not controls) 的答案,接受的答案返回了一些控件,因此我添加了对名称 属性 的检查(哪些组件在运行时没有):
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;
}