2017-03-19 16 views
0

C#Windowsアプリケーションでは、ログインフォーム、MdiParentフォーム、および複数のMdichildフォームがあります。MDIParentからMDIChildフォームへのパラメータの受け渡し

public void ShoworActivate<T>(string loggedUser)where T: Form 
{ 
    var k = MdiChildren.Where(c==>c.GetType() == typeof(T)).FirstorDefault(); 
    if(k= null) 
    { 
     k = (Form)Activator.CreateInstance(typeof(T)); 
     ......More code 
    } 
} 

私が合格する必要があります:首尾MDI親フォームでユーザーがログインが起動され、その後、ユーザーがMDI Parent.InにMDI親フォームのボタンをクリックすることにより、子フォームを起動することができたとき、私は方法を持っています子フォームのパラメータ文字列loggedUserを子フォームのコンストラクタに置くと、エラーが発生します。 {"このオブジェクトにはパラメータのないコンストラクタは定義されていません"}

どうすればこの問題を解決できますか? Child Form = new ChildForm(string loggedUser)を使用したくありません。これは機能します。

+0

どこでどのようにエラーが発生しますか?何が起きているのかを理解するために、より多くの文脈を与えてください。コンストラクタの注入はこれのためのより良い選択肢と思われますが、それ以外の場合は、2番目のオプションとしてパブリックプロパティまたはメソッドが適しています。 – Alejandro

+0

私はエラーが発生しました.... k =(Form)Activator.CreateInstance(typeof(T)); – user3511641

答えて

0

のCreateInstance(typeof演算(T)、loggedUser)でCreateInstance方法の種々のオーバーライドを参照することができます。

+0

これは簡単です。 –

0

リフレクションを使用してフォームインスタンスを作成することで、エンジニアリングを行うことになります。フォームを作成するために工場を使用していた可能性があります。

あなたの現在の問題については、別のバージョンのCreateInstanceメソッドを使用する必要があります。このメソッドもまた、ターゲットタイプのコンストラクタに渡すパラメータを受け取ります。

k = (Form)Activator.CreateInstance(typeof(T), System.Reflection.BindingFlags.CreateInstance, null, loggedUser); 

あなたはhttps://msdn.microsoft.com/en-us/library/system.activator.createinstance(v=vs.110).aspx

+0

フォームを作成するためにファクトリを使用する必要がある場合は、どうしたらよいですか?ありがとうございます。 – user3511641

関連する問題