[C#] WinForm動態側邊欄

利用MouseHover、HouseLeave、MouseEnter 等事件實現

首先新增一個checkbox作為控制邊欄顯示的工具
將其Appearence設為Button
並對他設置MouseHover事件,滑鼠移到上面時自動展開邊欄

        private void toolStripButton1_MouseHover(object sender, EventArgs e)

        {
            if (splitContainer1.Panel1Collapsed)//true代表已收合
                splitContainer1.Panel1Collapsed = false;
        }

這邊使用SplitContainer是為了可以讓使用者自由調整欄寬
如果用一般的Panel可以直接 panel2.Visable = false

之後是CheckBox_Checked事件,有選取的話則永久顯示邊欄
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            sidebarshown = !sidebarshown;
            if (sidebarshown == false) splitContainer1.Panel1Collapsed = true;
            else splitContainer1.Panel1Collapsed = false;
        }
之後對邊欄設置MouseLeave事件,離開時如果checkbox沒有按下去的話就自動收合側欄
這邊多判斷了滑鼠位置是希望可以只在滑鼠從右側離開邊欄時才觸發

        private void splitContainer1_Panel_MouseLeave(object sender, EventArgs e)
        {
            if (sidebarshown != true && PointToClient(Cursor.Position).X - splitContainer1.Location.X > splitContainer1.Panel1.Width)
                splitContainer1.Panel1Collapsed = true;
        }

最後新增滑鼠進到主畫面時的MouseEnter事件,確保邊欄可以確實確實關閉

        private void splitContainer1_Panel2_MouseEnter(object sender, EventArgs e)
        {
            if (sidebarshown != true)
                splitContainer1.Panel1Collapsed = true;
        }

留言