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

フィールドを取得するための呼び出しでは、バインディング フラグを受け入れるオーバーロードを使用する必要があります。少し試行錯誤する必要があるかもしれませんが、必要だと思います:

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 に答える