程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> C#使用Panel實現窗體動態側邊欄

C#使用Panel實現窗體動態側邊欄

編輯:關於ASP.NET

    可以實現側邊欄的展開、隱藏和鎖定的功能。添加的側邊欄默認是不顯示的通過鼠標的懸停事件MouseHover來觸發展開動作。側邊欄實際上是一個窗體或者是容器,實現展開的動作必須在一個時間段內逐步的增加寬度,我采用Panel作為容器的載體,在一個線程中逐步增加Panel的Width屬性。隱藏,主要使用的是Panel的Visible屬性來實現,隱藏條件的判斷是通過判斷鼠標位置是不是在側邊欄的邊界之外來實現的。鎖定,是使Panel始終處於顯示的狀態,使隱藏Panel的函數不執行來實現的。
    界面

    wps_clip_image-11395

    相關代碼:
    展開:
    private void toolStripButton2_MouseHover(object sender, EventArgs e)
    {
    //鼠標懸停事件,展開
    if (!this.panel2.Visible) //panel2為側邊欄的容器
    {
    Thread ts = new Thread(new ParameterizedThreadStart(TaskShowPanel));
    ts.Is true; //設置為後台線程
    ts.Priority = ThreadPriority.Normal; //設置優先級
    ts.Start((Object)245); //Panel展開寬度245
    }
    }
    //定義的線程執行函數
    private void TaskShowPanel(Object ParObject)
    {
    int w = (int)ParObject;
    for (int i = 0; i <= w; i++)
    {
    ShowPanel(this.panel2, i);
    }
    }
    private delegate void SetTextCallback(Panel p1, int w);
    /// <summary>
    /// 展開動作
    /// </summary>
    /// <param name="p1">panel容器</param>
    /// <param name="w">寬度</param>
    private void ShowPanel(Panel p1,int w)
    {
    //跨線程訪問
    try
    {
    if (p1.InvokeRequired)
    {
    SetTextCallback d = new SetTextCallback(ShowPanel);
    p1.Invoke(d, new Object[] { p1, w });
    }
    else
    {
    p1.Width = w;
    if (!p1.Visible)
    {
    p1.Visible = true;
    }
    }
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message, "ShowPanel函數執行錯誤");
    }
    }
    隱藏:
    private void listView1_MouseMove(object sender, MouseEventArgs e)
    {
    Point panelPoint = this.PointToClient(Control.MousePosition); //鼠標當前位置
    //this.panel2.Location.X panel2的起始位置
    //this.panel2.Width panel2的寬度
    if (this.panel2.Visible && (panelPoint.X > (this.panel2.Location.X + this.panel2.Width)))
    {
    this.panel2.Visible = false;
    }
    }
    鎖定:
    private void button1_Click(object sender, EventArgs e)
    {
    //刪除隱藏事件
    this.listView1.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.listView1_MouseMove);
    }

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved