私はC#を初めて使用し、基本的なプログラムを作成しました。タブ付きメニュー - 各タブは別々のCSファイルとして
私の "メインメニュー"は、7つのタブが上に並んで設定されています。 私はCASEを設定しているので、ユーザーがタブを選択すると、その特定のサブメニュー(frmXXXmenu)がコントロールに追加されます。
問題が
- ので、私は、フォームの生成インスタンスを保持、今各フォームのクリックを開きます。この正しい
です(と私は私のプロセスメモリを増やす見ることができます!)
ですprivate void tabmain_SelectedIndexChanged(object sender, EventArgs e) { string curtab = tabmain.SelectedTab.Name.ToString(); switch (tabmain.SelectedTab.Name) { case "tabcollect": frmcollectmenu frmcollectmenu = new frmcollectmenu(); frmcollectmenu.TopLevel = false; tabcollect.Controls.Add(frmcollectmenu); frmcollectmenu.Dock = DockStyle.Fill; frmcollectmenu.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; frmcollectmenu.Show(); break; case "tabpack": frmpackmenu frmpackmenu = new frmpackmenu(); frmpackmenu.TopLevel = false; tabpack.Controls.Add(frmpackmenu); frmpackmenu.Dock = DockStyle.Fill; frmpackmenu.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; frmpackmenu.Show(); break; } }
その他7個のタブ。
私は正しい方向にありますか?そうであれば、このインスタンスの状況をどのように修正しますか?
私は、もうアクティブでなくなったときに廃棄するか、すでに開いているときに新しいインスタンスを作成しないと思っていましたか?フォームの
第二の問題
一つは、(それがSQLに基づいてチャートを示している)を開くのに約2秒かかります。プログラムを起動するためにfrmmain()を開いたときにタブにこのページを読み込むことができます。その後、タブを開くとロードされますか? は私が(目に見える部分を追加)
frmcollectmenu frmcollectmenu = new frmcollectmenu();
frmcollectmenu.TopLevel = false;
tabcollect.Controls.Add(frmcollectmenu);
frmcollectmenu.Dock = DockStyle.Fill;
frmcollectmenu.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
frmcollectmenu.visible = false;
frmcollectmenu.Show();
を入れてみました、タブを選択するときに、私は再びそれが見えるようになるが、それはまだ数秒とdoesntのは本当に正しい仕事かかるようです。
の起動時に構築した辞書から適切な行動を選択しますか?期待どおりに動作しないのですか?コンパイルしていませんか? –
@YvetteColombはコンパイルしていますが、より多くのインスタンスを開くと、毎回プロセスメモリが増加します。これは明らかに「良いテクニック」ではないので、私はそれについてより賢くなる方法を学んでいます:) –