閱讀909 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go win7 64bit , Eclipse+Android SDK安裝運行
  下一篇:go 算法訓練-鐵軌