C# 係統應用之使用Pancel控件同一窗體切換頁麵
該文章是項目"個人電腦曆史記錄清除軟件"的係列文章.主要講述如何使用Pancel控件實現類似於360安全衛士的點擊圖標窗體不變,但頁麵內容變換的功能及遇到的重疊Panel不能設置Visible(可見)問題.
一.通過文檔大綱查看層次關係
在使用panel控件時我遇到的一個問題是:當有多個panel(對控件集合分組)控件重疊顯示時,在頁麵切換如下代碼:
private void pictureBox1_Click(object sender, EventArgs e) { panelIE.Visible = true; panel2.Visible = false; }
但運行的結果總是Panel1和Panel2同時隱藏.(感謝:bdmh)
解決方案:其中一個panel的parent可能被設置為另一個panel了,在拖動窗體控件時很容易就拖動至其他空間上.通過打開"視圖->其他窗口->文檔大綱"查看控件的層次圖,就可以發現panelIE確實被自動設置為panel2的parent.
所以可以在"文檔大綱"中手動拖動設置其panel關係,但好像隻能拖動至頂層.(PS:沒有找到好的方法,而且選中某個panel添加控件如button沒有其視圖可編輯)
二.設置多個panel切換界麵
最初的打算是使用6個panel控件實現,點擊不同的圖標設置其Visible(是否課件)實現同一個窗體切換界麵.代碼如下:
/// <summary> /// 點擊標題菜單,對panel的顯示 /// </summary> /// <param name="p"></param> private void PanelIsDisplay(int p) { //設置panel顯示界麵 (IE\Word\回收站\U盤\電腦\文件粉碎) panelIE.Visible = false; panelWord.Visible = false; panelRecycle.Visible = false; panelU.Visible = false; panelRecent.Visible = false; panelFile.Visible = false; switch (p) { case 1: //顯示"清除IE" { panelIE.Visible = true; } break; case 2: //顯示"清除Word" { panelWord.Visible = true; } break; case 3: //顯示"清空回收站" { panelRecycle.Visible = true; this.panelRecycle.BackColor = Color.Red; } break; case 4: //顯示"清除U盤" { panelU.Visible = true; } break; case 5: //顯示"電腦清理" { panelRecent.Visible = true; } break; case 6: //顯示"電腦清理" { panelFile.Visible = true; } break; default: { } break; } } //鼠標點擊"清除IE"實現切換界麵 private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { //透明罩設置 cmd.ShowOpaqueLayer(panel_mol3, 125, true); //自定義設置Panel切換函數 PanelIsDisplay(1); }
但是後來發現設置多個panel的層次關係和向某個panel中添加控件時非常繁瑣,同時有的控件不能很好的設置.所以建議如果是2個panel的切換或者沒有重疊的panel設置,可以通過該方法設置其Visible(是否可見)來隱藏與顯示.如果重疊的可以參考下麵的方法.
三.Panel控件加載Form實現頁麵切換
可以通過panel控件加載Form來實現該頁麵切換功能.向解決方案中添加不同頁麵的Form,設置窗體的控件是非常方便的,再加載到Panel2中顯示即可.代碼如下:
/// <summary> /// 向panel2中加載窗體Form,MouseEnter事件調用 /// </summary> /// <param name="p"></param> private void Control_Add(Form form) { panel2.Controls.Clear(); //移除所有控件 form.TopLevel = false; //設置為非頂級窗體 form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //設置窗體為非邊框樣式 form.Dock = System.Windows.Forms.DockStyle.Fill; //設置樣式是否填充整個panel panel2.Controls.Add(form); //添加窗體 form.Show(); //窗體運行 } //鼠標進入"清空回收站" private void panel_mol3_MouseEnter(object sender, EventArgs e) { //透明罩設置 cmd3.ShowOpaqueLayer(panel_mol3, 125, true); if (isClick1 == false) cmd1.HideOpaqueLayer(); if (isClick2 == false) cmd2.HideOpaqueLayer(); if (isClick4 == false) cmd4.HideOpaqueLayer(); if (isClick5 == false) cmd5.HideOpaqueLayer(); if (isClick6 == false) cmd6.HideOpaqueLayer(); //自定義函數加載窗體 CleanRecycle CleanRecycle recycle = new CleanRecycle(); Control_Add(recycle); }
運行結果如下圖所示:
最後該文章主要是結合自己的實際東西講解,有些淺顯和簡單,如果你剛好遇到類似的問題就可能對你使用Panel控件有所幫助.同時如果在文章中遇到錯誤或不足的地方,請海涵!我也在尋找更好的方法,如果你在同一個窗體下切換界麵有什麼更好的方法,希望告知.
(By:Eastmount 2014-3-18 下午4點 原創CSDNhttps://blog.csdn.net/eastmount/)
最後更新:2017-04-03 12:55:39