我正在尝试使用Reflection获取Form的BindingSource。以下代码是我到目前为止尝试过的,尽管它有一个错误:
public class MyClass :Form
{
BindingSource bs = new BindingSource();
}
public static class Class2
{
public static BindingSource GetBindingSource(string FieldNameP, Form FormP)
{
BindingSource Bs = null;
var info=FormP.GetType().GetField(FieldNameP);
if(info != null)
{
Bs = (BindingSource)info.GetValue(null)
}
return Bs;
}
}
答案 0 :(得分:2)
在致电获取字段时,您需要使用接受overload的binding flags。您可能需要尝试一下,但我觉得您需要:
BindingFlags.NonPublic | BindingFlags.Instance
.GetValue
获取要调用该字段的对象的实例。
.GetValue(myform);
更好的方法可能是创建一个界面:
public interface IBindable
{
BindingSource Source { get; }
}
将其应用于表格:
public class MyClass : Form, IBindable
{
private BindingSource _Source = new BindingSource();
public BindingSource Source { get { return _Source; } }
}
使用界面:
BindingSource formSource = MyForm.Source;