2

我正在尝试使用反射获取表单的 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;
    }
}
4

1 回答 1

2

在调用 get 字段时,您需要使用接受绑定标志的重载。您可能需要尝试一下,但我认为您需要:

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;
于 2012-08-28T14:32:17.813 回答