2017-01-01 5 views
-4

とのインスタンスを作成します。私はこのコードを持っているパラメータ

LoginForm loginform = new LoginForm(); 
loginform.TopLevel = false; 
panelcenter.Controls.Add(loginform); 
loginform.Show(); 

今、私はそのような方法をしたいと思います:

private void AddFormToPanelCenter(string Form_0, string name) 
{ 
    Form_0 name = new Form_0(); 
    name.TopLevel = false; 
    panelcenter.Controls.Add(name); 
    name.Show(); 
} 

問題は、それは明らかに、私のパラメータは文字列であるということです正しいものではありませんが、どのパラメータを使用すべきかわかりません。

+0

に役立ちます希望は、次のようなものを使用することができます。しかし、質問を編集し、投票を避けるために質問を明確にするために情報を追加することをお勧めします。 [質問する方法](http://stackoverflow.com/help/how-to-ask)を読むことができます。または、[このチェックリスト](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)をご覧ください。これは、あなたの質問をより理解しやすくするための非常に参考になります。 –

+0

ありがとう!問題は私もその声明のどちらも確信していなかったことです! :| –

答えて

1

あなたが任意のフォームのインスタンスで、あなたの方法を適用することができるようにしたい場合は、あなたの方法に、フォームのインスタンス自体を渡すことができます。

void AddFormToPanel(Form frm, Panel pnl) 
{ 
    frm.TopLevel = false; 
    pnl.Controls.Add(frm); 
    frm.Show(); 
} 

用途:

LoginForm frm = new LoginForm(); 
AddFormToPanel(frm, panelcenter); 

フォームは常にLoginFormのものであろうが、あなたはインスタンスを使用することができるようにしたい場合は、従来の方法に固執する、またはフォームのインスタンスを返す関数に変換することができます

public Form AddFormToPanel(Panel pnl) 
{ 
    LoginForm frm = new LoginForm(); 
    frm.TopLevel = false; 
    pnl.Controls.Add(frm); 
    frm.Show(); 
    return frm; 
} 

使い方:

LoginForm frm = (LoginForm)AddFormToPanel(panelcenter); 

はまた、任意のフォーム上の方法を適用するための良い方法は、あなたがそれのインスタンスの代わりに型を渡すことができるようにジェネリッククラスを使用することです。

public class NewForm<T> where T : Form, new() 
{ 
    public static void AddFormToPanel(Panel pnl) 
    { 
     T frm = new T(); 
     frm.TopLevel = false; 
     pnl.Controls.Add(frm); 
     frm.Show(); 
    } 
} 

使用法:

NewForm<LoginForm>.AddFormToPanel(panelcenter); 

私は私はあなたが下記の私の答えに必要なものをカバーだと思う:)

+0

Omg!あなたは天才です!ありがとう、ありがとう!私はこれを探していた! –

+0

あなたは歓迎です:)。私は喜んで助けてくれました。それでも質問を編集する必要があります。上記の質問に対する私のコメントを確認してください。 –

1

パラメータを必要としないため、パラメータを渡す必要はありません。以下のように(あなたはまた、親パネルを渡すことができ

private void AddFormToPanelCenter() 
{ 
    Form name = new Form(); 
    name.TopLevel = false; 
    panelcenter.Controls.Add(name); 
    name.Show(); 
} 
+0

うん!しかし、私は他のFormを呼んでみたいと思います。 –

関連する問題