2

少しテストした後、子フォームの複数のインスタンスの作成を (MdiParent フォームから) 回避するために、次の解決策を思い付きました。

最初のフォームでは、コードは次のようになりました。

public CatForm MyCatForm {
    get {
        var myCatForms = 
            MdiChildren.Where(form => form.GetType() == typeof(CatForm));

        if (myCatForms.Count() > 0)
            return (CatForm)myCatForms.First();

        return new CatForm { MdiParent = this };
    }
}

ここまでは順調だったので、今度は他の子供たちのフォームで同じことを繰り返し始めようとしていました (Cat という単語を Dog、Sheep に変更してください)。

誰かが次のようなコードを書いてくれませんか:

private Form GetForm<T>(T form){
    var myForms = MdiChildren.Where(aForm => aForm.GetType() == typeof(T));

    if (myForms.Count() > 0)
        return myForms.First();

        return new (typeof(T) as Form) { MdiParent = this } ;
}

コンパイル時のC#は戻り値の型を判断できないようです:(

この場合、リフレクションは従うべき適切なアプローチでしょうか?

子フォームの一意のインスタンスを作成できるようにしたいと考えています。

前もって感謝します

4

2 に答える 2