当窗口或者容器控件中的控件在布局过程中发生重叠的时候,会出现层次性。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框的叠放顺序。