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

有時候發現界面的佈局比較複雜,須要隱藏顯示一部份內容須要使用動態側邊欄的方法實現,雖然但是使用第三方的控件,可是有時候也不須要那麼麻煩,本身作了一個簡單的,但是使用在要求不高的場所。函數

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

界面ui

wps_clip_image-11395

相關代碼:this

展開:.net

private void toolStripButton2_MouseHover(object sender, EventArgs e)線程

        {orm

//鼠標懸停事件,展開事件

if (!this.panel2.Visible)  //panel2爲側邊欄的容器ip

            {get

Thread ts = new Thread(new ParameterizedThreadStart(TaskShowPanel));

                ts.IsBackground = 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);

        }

作的還不太成熟,可是基本的功能實現了,本人拋磚引玉一下,但願有大俠有更好的方法。源代碼附上

C#使用pannel實現動態側邊欄

相關文章
相關標籤/搜索