當窗口或者容器控件中的控件在布局過程中發生重疊的時候,會出現層次性。Z順序較大的控件會遮擋Z順序較小的控件,放在頂層的控件會擋住放在底層的控件。
1、編輯一個這樣的窗口(使用Label控件)
2、添加Label控件的繪制邊框事件
3、分別添加三個繪制邊框事件,並在事件中添加如下代碼(中間使用到了pen工具,使用pen工具使用后要釋放pen)
private void label1_paint(object sender, PaintEventArgs e) { //繪制邊框 Label lb = sender as Label;//將sender中符合Label應用類型或者為null的類型之間進行轉換(只執行引用轉換) Pen pen = new Pen(Color.Yellow, 10f);//實例化pen工具 e.Graphics.DrawRectangle(pen ,new Rectangle (0,0,lb.Width,lb.Height ));//繪制邊框 pen.Dispose();//釋放pen對象 } private void label2_paint(object sender, PaintEventArgs e) { Label lb = sender as Label;//將sender中符合Label應用類型或者為null的類型之間進行轉換(只執行引用轉換) Pen pen = new Pen(Color.Red, 10f);//實例化pen工具 e.Graphics.DrawRectangle(pen, new Rectangle(0, 0, lb.Width, lb.Height));//繪制邊框 pen.Dispose();//釋放pen對象 } private void label3_paint(object sender, PaintEventArgs e) { Label lb = sender as Label;//將sender中符合Label應用類型或者為null的類型之間進行轉換(只執行引用轉換) Pen pen = new Pen(Color.Blue , 10f);//實例化pen工具 e.Graphics.DrawRectangle(pen, new Rectangle(0, 0, lb.Width, lb.Height));//繪制邊框 pen.Dispose();//釋放pen對象 }
4、添加鼠標單擊事件
5、添加如下代碼(三個控件的公用一個鼠標單擊事件)添加一下代碼
private void OnlabelMouseClick(object sender, MouseEventArgs e) { Control c = sender as Control; if (e.Button == System.Windows.Forms.MouseButtons.Left)//如果是單擊鼠標左鍵 { c.BringToFront();//增加z順序 } if (e.Button == System.Windows.Forms.MouseButtons.Right )//如果是單擊鼠標右鍵 { c.SendToBack();//增少z順序 } }
6、編譯器生成代碼(在Form1.Designer.cs)
注:在添加事件的時候可以手動通過代碼添加也可以通過上面的方法添加事件。
通過上面兩張圖片我們可以看出來,通過鼠標的左單擊改變了Top的這個Lebel框的疊放順序。