2016-04-12 13 views
1

私は単一マスタフォームをフォームの左側に沿って使用するアプリケーションを持っています。Winforms UserControlsの追加と削除

右側に私が作成したUserControlのプレースホルダーとして機能するpanelがあります。メニュー項目の

たびにユーザーclicks、関連UserControlは、このようなコードを使用して表示されます。

//Display UserControl first 
ucMyUserControl uc = new ucMyUserControl(); 
uc.Dock = DockStyle.Fill; 
pnlContainer.Controls.Add(uc); 

だけコピーして、各ボタンのためにこれを貼り付けたり、私はいつでもするよりも、より良い方法はありますUserControlを表示します。私は毎回呼び出す関数を作成し、ちょうどUserControlの名前を渡す必要がありますか?

多分私はそれを使っている方法で最初から間違っています。私はこのコンセプトには新しく、物事を試しています。

+1

タブパネルを使用して、タブを非表示にすることができます。ボタンはタブのインデックスを変更するだけです。ボタンがスタックパネル内にあり、動的に生成される場合は、ボタンインデックスを使用してタブインデックスを変更できます。ごめんなさい。 –

答えて

3

確かに、あなた自身を繰り返さないでください。ヘルパーメソッドでDRYコードを書いてください。それは次のようになります。

public void ShowPage(UserControl uc) { 
    while (pnlContainer.Controls.Count > 0) pnlContainer.Controls[0].Dispose(); 
    uc.Dock = DockStyle.Fill; 
    pnlContainer.Controls.Add(uc); 
} 

そして今、あなたは、単にループをしながら、重要です探して風変わりで、あなただけのControls.Remove()メソッドを使用しないことをShowPage(new ucMyUserControl());

注意を呼び出します。削除するコントロールを削除することは非常に重要です。そうしなければ、永遠に生き続け、最終的にプログラムがクラッシュします。

+0

DRYには、TabPanelを非表示のTabItemで使用しなければならないと思います。また、このアプローチを使用して、彼はデザイナーを使用することができます。 –

+1

Meh、ユーザーコントロールは、全体のチェックポイントをより良く調整し、確かにデザイナーのサポートを得ています。 –

+0

デザイナはメインウィンドウにあり、コントロール自体には表示されません。また、TabPanelはすべての時間を処理する必要がないため、処理時間が大幅に短縮されますが、さらに多くのRAMを消費する可能性があります。しかし、ユーザーは常に速い反応を好みます。 –

関連する問題