GetComponent With Reflection

时间:2012-08-28 14:29:52

标签: c#

我正在尝试使用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;
    }
}

1 个答案:

答案 0 :(得分:2)

在致电获取字段时,您需要使用接受overloadbinding 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;