windows窗体应用程序的控件都派生自Control类,并继承了许多通用成员,下面介绍Control类的一些基本特征,了解这些能够大致知道控件是如何实现在窗体中布局的。
Achor指示在控件的容器被调整时,控件紧贴着哪个方向的边沿,例如在一个窗口中放置一个按钮,并将按钮的Anchor属性设置为Right+Bottom,当用户调整窗口的大小时,按钮将保持与窗口的底部和右边沿的距离不变ForeColor、BackColorForeColor属性表示前景色,即控件上呈现的文本的颜色;BackColor属性表示控件的背景色Dock指示控件如何填充容器中的可用空间,如果设置为FILL则表示控件将占满所有的可用空间;如果设置为TOP,则表示控件将占用容器上方的所有空间Location与Left、Top表示控件在容器中的位置、如果控件是窗口,那么它的位置就相当于桌面坐标(屏幕坐标)。由于Location属性是Point结构,是值类型,因此不应该直接修改其X和Y的值,而是向Location属性赋予一个新的Point实例;叶可以直接设置Left(x坐标)属性和Top(y坐标)属性的值来调整控件的位置,例:Point p2 = new Point(20, 30); pictureBox1.Location = p2Size和Width、Height表示控件的大小,由高度和宽度两个值决定。Size类型是Size结构,是值类型,不能直接修改,必须将一个新的Size实例赋值给Size属性,或者直接修改控件的Width和Height属性,例如:控件名.Size=new Size(高度,宽度)
调整控件的Z顺序 当窗口或容器控件中的控件在布局过程中发生重叠的时候,会出现层次性。Z顺序较大的控件会遮挡Z顺序较小的控件,即放在顶层的控件会挡住放在底层的控件。 1.设计人员可以在设计阶段通过窗体设计器来调整控件的Z顺序,右击—【置于顶层】/【置于底层】。 2.可以在运行阶段动态改变控件的Z顺序。操作方式是左击时增加控件的Z顺序,右击时减少控件的Z顺序。同时,为了让读者可以清晰的观察到控件的布局变化,可以分别处理他们的Point事件(Control.Point控件重绘)。 可以试试下面这段代码,分别增加label1,label2,label3.体会它的变化
public Form1()
{
InitializeComponent();
label1.Paint += label1_Paint;
label2.Paint += label2_Paint;
label3.Paint += label3_Paint;
label1.MouseClick += OnLabelMouseClick;
label2.MouseClick += OnLabelMouseClick;
label3.MouseClick += OnLabelMouseClick;
}
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顺序
}
}
private void label3_Paint(object sender, PaintEventArgs e)
{
Label lb = sender as Label;//是事件源,表示触发事件的那个组件
Pen pen = new Pen(Color.Blue, 15f);//用于绘制边框的笔
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;//是事件源,表示触发事件的那个组件
Pen pen = new Pen(Color.Red, 15f);//用于绘制边框的笔
e.Graphics.DrawRectangle(pen, new Rectangle(0, 0, lb.Width, lb.Height));
pen.Dispose();//释放Pen对象
}
private void label1_Paint(object sender, PaintEventArgs e)
{
Label lb = sender as Label;//是事件源,表示触发事件的那个组件
Pen pen = new Pen(Color.Yellow, 15f);//用于绘制边框的笔
e.Graphics.DrawRectangle(pen, new Rectangle(0, 0, lb.Width, lb.Height));
pen.Dispose();//释放Pen对象
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200108143316952.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk3NDE0Ng==,size_16,color_FFFFFF,t_70)
|