1

フォームを表示するために汎用的にしたい関数があります。フォームがすでに開いているかどうかを関数で確認し、開いていない場合はフォームを一番上に移動して、フォームの新しいインスタンスを作成して表示します。

フォームが開いているかどうかを確認する最初の部分はすべて問題ありませんが、Tからキャストして、タイプTの新しいフォームオブジェクトを作成しています。このコード行を使用してフォームのインスタンスを作成しましたが、obj = Activator.CreateInstance<T>();すべてが表示されるわけではありません。インテリセンスのメソッドとプロパティ。コードForm x = new Form1. xはすべてのメソッドとプロパティを表示しますが。

私はここで何か間違ったことをしていると確信しています。

     private static void ShowForm<T>(  )
    {
        T obj = default( T );

        List<T> opened = FormManager.GetListOfOpenForms<T>();
        if ( opened.Count == 0 )
        {
            // not opened

            // obj does not show all properties and methods
            obj = Activator.CreateInstance<T>();


            // x shows all properties and methods
            frmLogin x = new frmLogin();

        }
        else
        {
            // opened

        }

    }
4

1 に答える 1

5

継承するにはTを制約する必要がありますForm

private static void ShowForm<T>() where T : Form, new()

コンパイラがそれTが継承することが保証されていることを認識すると、またはその基本クラスFormで定義されたすべてのメンバーを使用できるようになります。Form

あなたの質問に対するより一般的な答えは、にキャストobjすることFormです。

于 2012-11-04T02:02:59.140 に答える