控件的基类–Control
- 用于 Windows 窗体应用程序的控件都派生自 Control类并继承了许多通用成员,这些成员都是平时使用控件的过程最常用到的。
- 无论要学习哪个控件的使用,都离不开这些基本成员,尤其是一些公共属性。由于 Conlrol 类规范了控件的基本特征,因此在学习如何使用各种控件之前,先介绍 Control类。
- 可以简单理解为 WinForm程序 == 一些控件组合 + 事件 + 业务逻辑 组成。控件是非常重要的。
本节主要介绍 Control类的一些基本属性,剩下一些内容会留到后面在介绍如何自己开发控件时再讨论。
一、Control类的一些常用属性
1、“Name”属性
控件实例的名称,通常通过“属性”窗口设置,控件实例名称与控件变量名称相同,以便在代码中能够引用。
指示在控件的容器被调整时,控件紧贴着哪个方向的边沿。比如,一个窗口中放置了一个按钮,并将按钮的Anchor属性设置为Right+Boltom,当用户调整窗口的大小时,按钮将保持与窗口的底部和右边沿的距离不变。下图为窗口被调整大小之前按钮的位置,下图为窗口被调整大小后按钮的位置,可以看到,按钮始终紧贴着窗口的右下角不变。
调整前如下:
调整后如下:
3、“Margin和Padding”属性
Margin属性与Padding属性都表示边距。如图所示,A、B、C三个控件形成嵌关系假设控件B为当前控件,即以B控件作为参考。Margin指的是B控件与它的父容器A边沿之间的距离;Padding指的是控件B与它的子级控件C之间的边距。所以,Margin与Padding是相对值。
4、“Visible”属性
指示控件是否可见,如果为true,则用户可以看到该控件,否则用户将看不到该控件
5、“Enabled”属性
指示控件是否可用。如果为true,说明控件处于可用状态;如果为false,表示控件不可用、控件将不与用户进行任何交互
6、“Font”属性
表示控件中所呈现文本的字体。包括字体、字体大小、是否加粗等
7、“ForeColor、BackColor和Backgroundlmage”属性
ForeColor属性表示前景色,即控件上星现的文本的颜色;BackColor展性表示控件的背景色;BackgroundImage属性可以提供一个像实例来绘制控件的背景。
8、“Dock”属性
指示控件如何填充容器中的可用空间。如果设置为Fill 则表示控件将占满所有可用空间;如果设置为Top,则表示控件将占用容器上方的所有空间;如果设置为Left,则表示控件将占用容器的左侧所有空间;如果设置为Right,则表示控件将占用容器的右侧所有空间;如果设置为Bottom,则表示控件将占用容器的下方所有空间;
9、“Location与Lef、Top”属性
表示控件在容器中的位置,如果控件是窗口,那么它的位置就相对于桌面坐标(屏落坐标)而定。由于Location属性的类型是Poini结构,是值类型,因此不能直接修改其X和Y的值,而是向Locaton属性赋一个新的Point实例;也可以直接设置Lef属性(X坐标)和Top属性(坐标)的值来调整控件的位置
10、“Size与Width、Height”属性
表示控件的大小,由宽度和高度两个值决定。与Locaton属性一样,Size属性的类型是Size结构,是值类型,不能直接修改,必须将一个新的Size实例赋给Size属性;或者直接修改控件的Width和Height属性
11、“Cursort”属性
获取或设置当鼠标指针位于控件上时显示的光标。
二、Control类的一些常用事件
1、Click:当控件被单击时发生。
2、DoubleClick:当控件被双击时发生。
3、GotFocus 和 LostFocus:分别当控件获得或失去焦点时发生。
4、KeyDown、KeyPress 和 KeyUp:分别当控件有焦点时,按下、按下并释放、释放一个键时发生。
5、MouseDown、MouseEnter、MouseMove、MouseHover、MouseLeave 和 MouseUp:分别当鼠标在控件上按下、移入、移动、悬停、移出和释放时发生。
6、Paint:当控件需要重绘时发生。
7、Resize:当控件的大小发生变化时发生。
8、DragDrop、DragEnter、DragLeave 和 DragOver:与拖拽操作相关的事件。
三、控件布局时注意点:控件的Z顺序
什么是控件的Z顺序?当窗体或容器控件中的控件在布局过程中发生重叠时,会出现层次性,Z顺序较大的控件会遮挡Z顺序较小的控件,即放在顶层的控件会挡住放在底层的控件。Z顺序大致结构如图所示:
Winform Z顺序核心解析
1、Z顺序基础概念
- Z顺序(Z-Order)是Winform中决定控件堆叠层级的属性,沿窗体的Z轴(深度方向)排列。Z序值较高的控件会覆盖较低值的控件,离窗体越近的控件优先级越高。
2、设计时调整Z顺序
- 图形化操作:
右键目标控件 → 选择【置于顶层】(Bring to Front)或【置于底层】(Send to Back),直接调整其显示层级。
点击“置于顶层”后,A控件会跑到B控件上方,如下图:
布局影响:
控件停靠(Dock属性)时,Z顺序会影响停靠优先级。较近的控件优先占据停靠区域,较远控件则在剩余空间中调整。
3、编程方式动态调整
常用方法:
- BringToFront():将控件提升至最顶层。
- SendToBack():将控件移至最底层。
精细控制:
- 使用Controls.SetChildIndex()方法,通过指定索引值调整子控件的Z序。例如:
this.Controls.SetChildIndex(specificControl, 0); // 置顶
this.Controls.SetChildIndex(anotherControl, Controls.Count -1); // 置底
此方法适用于容器内的子控件层级调整。
4、注意事项
-
性能优化:
若父控件包含大量子控件,频繁调用SetChildIndex可能影响性能。建议减少调用频率或批量操作。 -
跨线程操作:
在非UI线程中调整Z顺序时,需通过Invoke或BeginInvoke方法确保线程安全。 -
视觉效果增强:
可通过调整控件的Opacity、BackColor等属性,辅助区分重叠控件的显示层次。
5、Z顺序与布局优先级
- Z顺序不仅影响显示层级,还与控件的停靠(Dock)、锚定(Anchor)等布局属性交互。例如:停靠控件按Z序从近到远依次布局,后停靠的控件可能被覆盖。