# 控件库接口

结构图
![结构图](../winform/static/images/结构图.png)

## 目的

通过接口对控件库中控件的通用的属性、事件和方法进行约束和定义，既保证控件库的规范性，又方便后续程序开发中代码的编写。

<font color="red">**提问：接口的声明规范；接口的特性。  
小思考：为什么不用继承类或者抽象类的方式来进行约束？**</font> 

## 接口介绍

### IWnControl

控件库的主接口，所有的控件都直接或间接继承自IWnControl接口。当模块自动装载和卸载、控件间进行通信时需要用到该接口。 

- WnControlName：控件名称，在一个模块中，通过控件名称属性来唯一定位一个控件。例如object obj = AllObjects[WnControlName]  

- ParentWnForm：用于指明当前控件所在的WnForm窗体。因为一个模块中所有窗体的控件都放在AllObjects属性中，通过该属性可以很方便的就判断出当前控件所属的窗体，然后进行相关操作。例如，关闭子窗体时需要从AllObjects中把子窗体所有的控件移除掉，这时就用到了ParentWnForm属性。

<font color="red">**小思考：描述下关闭子窗体时ParentWnForm是如何起作用的。**</font>

### IAssemblyConrol

控件库的装配接口，具有装配自身或子控件功能时需要实现该接口。

- Assemble：装配控件的方法
- DisAssemble：卸载控件的方法  

<font color="red">**小思考：模块的控件是一层一层的，打开模块装配控件的时候，应该怎么进行装配？**</font>

### ISyncDataControl

控件库数据同步接口，用于控制控件间的数据是否自动同步，并且实现该接口的控件允许主动同步数据。  

IsAutoSyncData：是否自动同步数据，控件加载后默认都是自动同步数据的，但是特殊情况下不需要自动同步数据，可以通过该属性进行控制。  

- SyncData：主动同步数据方法。

<font color="red">**小思考：能否找到一个调用SyncData进行数据同步的场景？**</font>

### IBindDataControl
控件库绑定数据接口，当模块运行时将根据通信规则调用接口中的数据绑定方法为控件绑定数据。  

- BindData：绑定数据方法。  

<font color="red">**提问：还记的多态吗？**</font>

### ISingleControlBase

控件库单值控件接口，封装了单值控件常用的属性、事件和方法。

- ControlBorderStyle：用于获取或设置单值控件外边框的样式，可以设置为None、Grid、Box
- ControlBorderColor：用于获取或设置单值控件外边框的颜色，默认值80,80,80
- ControlBackColor：用于获取或设置单值控件 的背景颜色，未设置时与控件所在的容器背景色联动
- ControlEnabled：用于获取或设置控件是否可用
- ControlReadonly：用于获取或设置控件是否只读  

<font color="red">**小知识：Enabled和Readonly的区别**</font>

- CaptionText：用于设置控件的标题文本
- CaptionPosition：用于获取或设置控件标题的位置，可选项为Left、Top、Right、Bottom
- CapationMargin：用于获取或设置控件标题与控件边框的距离，默认为Padding(0,0,0,0)
小知识：控件的Margin属性
- CaptionAlign：用于获取或设置控件标题文本的对齐方式，采用九空格的设置方式
- CaptionForeColor：用于获取或设置控件标题文本的前景色
- CaptionFont：用于获取或设置控件标题文本的字体
- SplitDistance：用于获取或设置控件标题栏的长度或高度。注意，由于标题栏和控件大小设置的问题，当切换CaptionPosition时，可能会造成控件显示异常，此时只需要调节控件的大小和SplitDistance即可

<font color="red">**小思考：请分析为什么会出现异常**</font>

- EditorBorderStyle：用于获取或设置编辑器的边框样式，可选项为None、Box、UnderLine
- EditorBorderColor：用于获取或设置编辑器边框颜色，默认值为80,180,230
- EditorMargin：用于获取或设置编辑器与边框的距离
- EditorAlign：用于获取或设置编辑器的对齐方式，可选项为Left、Center和Right
- EditorBackColor：用于获取或设置编辑器的背景色
- EditorForeColor：用于获取或设置编辑器的前景色
- EditorFont：用于获取或设置编辑器的字体
- IsEnterMoveNext：用于获取或设置是否允许通过按下回车调到下一个控件

<font color="red">**小知识：控件的TabIndex属性**</font>

- DefaultValue：用于获取或设置控件的默认值，给控件设置默认值会同时修改控件的值
- Value：用于获取或设置控件的值
- ColumnName：用于获取或设置单值控件关联的列名称，模块控件通信时使用
- OriginControl：单值控件封装的原始控件，用于开发人员针对原始控件编程使用
- SetFocus：让控件获得焦点
- ValueChanging：控件的值发生改变时触发
- ValueChanged：控件的值发生改变后触发

### IWnSkin

控件库皮肤接口，用于控制系统的肤色。

- CurrSkinColor：用于获取或设置控件的肤色，默认值254,254,254

容器控件改变肤色的时候，会同时更改子控件的肤色

### IWnContainer

控件库容器接口，用于容器类控件自动调整大小

- IsAllowBestFitWidth：用于获取或设置是否允许自动调整宽度
- IsAllowBestFitHeight：用于获取或设置是否允许自动调整高度
- BestFitWidth：自动调整宽度
- BestFitHeight：自动调整高度

<font color="red">**思考：属性的设置一个值后，该属性一定是这个值吗？**</font>
