# 容器类控件

结构图  
![容器类控件](../winform/static/images/容器类控件.png)

## 基础控件介绍

### Form窗体类

#### 属性

- Icon：用于获取或设置窗体在标题栏上的图标，规格16x16，一般不会修改这个属性
- Text：用于获取或设置窗体的标题
- ControlBox：用于获取或设置是否在标题栏显示控制按钮，包括最大化、最小化和关闭按钮
- MaximizeBox：用于获取或设置标题栏的最大化按钮是否可用
- MinimizeBox：用于获取或设置标题栏的最小化按钮是否可用

<font color="red">**注意：单独设置MaximizeBox、MinimizeBox为false和同时设置两个为false的表现有和不同？**</font>

- WindowsState：用于获取或设置窗体的状态，包括Normal、Minimized、Maxmized
- BackColor：用于获取或设置窗体的背景色
- Width：用于获取或设置窗体的宽度
- Height：用于获取或设置窗体的高度
- TopMost：用于获取或设置当前窗体是否为顶层窗体

<font color="red">**小知识：如何让一个子窗体仅仅是它的父窗体的顶层窗体**</font>

- FormBorderStyle：用于获取或设置窗体的边框样式，常用值Sizabled和FixedSingle

<font color="red">**小知识：窗体什么时候设置为Sizable，什么时候设置为FixedSingle**</font>

- StartPosition：用于获取或设置窗体的启动位置，一般设置为CenterScreen
- SizeGripStyle：用于获取或设置显示窗体右下角拖拽手柄的时机，可选择项有Auto、Show、Hide
- ContextMentStrip：用于获取或设置与窗体关联的右键菜单
- AutoScroll：用于获取或设置是否自动显示滚动条
- ShowInTaskbar：用于获取或设置是否在Windows系统的任务栏上显示窗体
- TransparenceKey：用于获取或设置绘制到窗体上将会变为透明色的颜色
- KeyPreview：用于获取或设置在窗体的控件上触发按键事件时是否优先触发窗体的按键事件  

<font color="red">**小知识：该属性的使用场景？**</font>

- Controls：窗体子控件的集合
- ActiveControl：用于获取或设置窗体上的活动控件

#### 方法

- Close：关闭窗体
- Show：显示窗体
- ShowDialog：将窗体显示为模式对话窗体

#### 事件

- Load：在加载、显示窗体前触发的事件
- VisibleChanged：窗体Visible属性发生改变时触发
- Shown：在加载、显示窗体后触发
- SizeChanged：窗体大小发生改变时触发
- FormClosing：窗体关闭时触发，可以通过事件阻断窗体关闭
- FormClosed：窗体关闭后触发

### 布局相关属性

#### Panel

最简单的布局控件，除了通用的布局相关属性，没有特殊的布局属性，WnPanel继承自该控件，经常用于单据类表头和表尾布局

#### FlowLayoutPanpel

自动排版使用的布局控件，WnWrapPanel继承自该控件 

- AutoScroll：是否自动显示滚动条，设置为true后，子控件过多时，会根据自动排版的方向设定自动显示水平滚动条或垂直滚动条  
- FlowDirection：用于指定控件的布局方向，可选值有LeftToRight、TopDown、RightToLeft、BottomUp，默认值为TopDwon

<font color="red">**小思考：设置各个方向与滚动条出现方向的关系**</font>

- Padding：用于设定控件和子控件之间的距离

<font color="red">**注意：控件的Padding属性和子控件的Margin属性会对子控件的自动换行产生影响**</font>

#### SplitContainer

用于把一个布局界面拆分成两个布局界面，WnSplitPanel继承自该控件

- FixedPanel：用于获取或设置当SplitContainer大小变化时，其两个子Panel大小如何变化。如果设置为none，则两个Panel等比例变化大小，如果设置为Panel1，则Panel1的大小不变，仅仅Panel2的大小发生变化，反之亦然
- Orientation：用于获取或设置拆分器是水平的还是竖直的，值为Vertical和Horizontal
- Panel1MiniSize：用于获取或设置Panel1的最小大小，即拆分器距离Panel1的左边缘或上边缘的最小距离
- Panel2MiniSize：用于获取或设置Panel2的最小大小，即拆分器距离Panel2的右边缘或下边缘的最小距离
- SpliterDistance：用于设定拆分器与Panel1左边缘或上边缘的距离，变相的设定Panel1和Panel2的大小
- SpliterWidth：用于设定拆分器的宽度
- IsSpliterFixed：用于获取或设置控件是否允许拖拽拆分器来改变Panel1和Panel2的大小。如果设置为true，我们约定拆分器的宽度设置为3，否则设置为2
- SpliterIncrement：用于设定拆分器移动时的步进大小，设置的值越小，移动时动画效果越平滑

<font color="red">**小思考：拖拽时，如果拖拽的距离小于SpliterIncrement，会是什么结果**</font>

#### GroupControl

DEV控件，分组布局控件，WnGroup继承自该控件

- Appearance.BackColor：用于设定控件的背景色
- LookAndFeel.Style：控件的样式，编程时建议使用值为Skin和UltraFlat，默认值Skin
- LookAndFeel.UseDefaultLookAndFeel：用于设置是否使用默认的外观，默认值true

<font color="red">**注意：当LookAndFeel.Style为默认时，LookAndFeel.UseDefaultLookAndFeel设置为true，此时控件将采用默认的风格样式，并且对控件设置背景色，控件本身不起作用；当LookAndFeel.Style设置为UltraFlat时，设置LookAndFeel.UseDefaultLookAndFeel为false，此时控件将采用传统的Group控件的风格样式，并且对控件设置背景色，对控件本身起作用**</font>

- Text：分组控件的分组标题

#### XtraTabControl

分页布局控件，WnTab继承自该控件

##### 属性

- ClosePageButtonShowMode：用于设置卡片页关闭按钮的显示模式，一般情况下设置为不显示关闭按钮
- SelectedTabPage：用于获取或设置控件的当前卡片页
- HeaderLocation：用于获取或设置卡片页标题的位置，一般设置为Top，有时设置为Left
- HeaderOrientation：用于获取或设置卡片页标题文本的显示方向

<font color="red">**小知识：HeaderLocation和HeaderOrientation配合使用，当HeaderLocation为Top或者Bottom时，HeaderOrientation默认为Horizontal，当HeaderLocation设置为Left或者Right时，设置HeaderOrientation默认为Vertical**</font>

- TabPages：用于获取控件卡片页的集合
- MultiLine：用于获取或设置当卡片页过多时，卡片页标题是否可以多行显示

##### 事件

- CloseButtonClick：点击卡片页关闭按钮触发的事件
- SelectedPageChanging：切换卡片页前触发的事件，常用于进行切换前数据检查，如果不合法不允许切换卡片页
- SelectedPageChanged：切换卡片页后触发的事件，常用于获取切换后卡片页的数据

<font color="red">**注意：SelectedPageChanging和SelectedPageChanged事件的参数类都有属性PrevPage和Page，都分别代表切换前卡片页和要切换到的卡片页**</font>

##### XtraTabPage属性

- AutoScroll：卡片页内容超出卡片页显示范围时，是否自动出现滚动条
- Image：用于获取和设置卡片页的标题的小图标
- PageEnabled：用于获取或设置卡片页是否可用
- PageVisible：用于获取或设置卡片页是否可见

<font color="red">**注意：在实际开发过程中，通过代码设置卡片页可用或者可见时，可能会触发SelectedPageChanging和SelectedPageChanged事件，编程时需要注意**</font>

### 自定义容器控件

#### WnForm

继承自Form窗体类，用于承载和显示模块中的UI控件

##### 属性

- FuncFrameGuid：功能架构内码，通过菜单打开模块时给窗体的本属性赋值，通过本属性获取模块的功能权限和帮助信息

<font color="red">**小知识：什么是功能权限，什么是帮助信息**</font>

- ModuleFacadeAlias：远程应用层别名，通过菜单打开模块时，如果菜单配置了远程应用层别名就会给本属性赋值。本属性有值后，模块操作数据时将会操作远程应用层的数据
  
<font color="red">**小知识：应用层的概念，什么是远程应用层**</font>

- ModuleId：模块Id，一个模块的唯一标识，模块初始化时根据ModuleId获取模块的装配信息
- ExtraDataSourceInfo：附加数据源对象(ExtraDataSourceItem)的集合，窗体加载时会根据该集合初始化附加数据源操作信息，并把初始化结果保存到集合中

<font color="red">**小知识：ExtraDataSourceItem，包含三个属性分别是FacadeAlias、ModuleId和ConnectState**</font>

- BizTypeCode：业务类型代码，同一模块通过不同菜单打开时可能会赋予不同的BizTypeCode，根据BizTypeCode在模块中会加载不同的界面，执行不同的业务逻辑

<font color="red">**小知识：BizTypeCode**</font>

- ParamInfo：模块参数，通过解析功能架构管理的模块参数配置生成，类型为Hashtable
- Plugin：插件对象，动态编辑功能架构管理的插件代码生成，继承自IPlugin接口

<font color="red">**小知识：插件**</font>

- DataSource：WnDataSource对象，模块通过该属性与数据库进行交互

<font color="red">**小知识：WnDataSource**</font>

- AllObjects：模块所有已经加载的控件的集合，Hashtable类型

<font color="red">**提问：AllObjects对象中的键是什么？**</font>

- SyncDataRules：模块通信规则，模块初始化时，会根据配置的源对象初始化一份通信规则。格式为SyncDataRules[SrcWnControlName]=TgtWnControlNames，目的名称允许多个，多个之间用“|”进行分隔

<font color="red">**小思考：请举一个通信规则目的控件名称是多个的例子**</font>

- IsAutoRemoveObject：用于指定当窗体关闭时，是否通过窗体的FormClosed事件把所有的控件都从AllObject中移除掉

<font color="red">**小思考：请思考什么时候会设置IsAutoRemoveObject为false**</font>

- RightInfo：控件功能权限集合，类型为ArrayList，模块将根据该集合中的值对模块的权限进行控制

<font color="red">**小知识：RightInfo中的值是如何添加的**</font>

- FuncName：模块名称，允许用过通过该属性自定义模块的显示名称

<font color="red">**小提问：模块默认的显示名称是什么？该属性如何起作用**</font>

- IsDirectConnectDB：是否直连数据库

<font color="red">**小知识：什么是直连数据库，作用是什么**</font>

###### 事件

- AfterAssemble：窗体执行Assemble方法成功后触发的事件。在该事件中经常做模块初始化任务。

<font color="red">**小提问：为什么不用Load事件而是用AfterAssemble事件？**</font>

##### 方法

- ClearAssemblyInfo：清空模块架构和控件装配信息（架构信息和控件装备信息是控件库内部对象，没有对方开放）。
- GetCurrLanguageContent：查找多语言对照表，根据代码获取当前语言下的内容
- RefreshData：虚方法，当模块是桌面工具模块是，用于刷新数据

<font color="red">**小知识：什么是桌面工具，为什么要设置该方法**</font>

#### WnPanel

继承自Panel控件，一般用于单据的表头和表尾布局。

##### 属性

- BorderStyle：用于获取或设置WnPanel的边框类型，可选枚举值有None、Line，默认值Line。为了能修改边框的颜色，通过消息机制重新绘制边框。
- BorderColor：边框颜色，默认值：170,170,170

#### WnGroup

继承自GroupControl，一般用作可移动的布局容器。

##### 属性

- DisplayMode：用于获取或设置WnGroup的显示样式，可选值为Classic(经典样式)和Standard(标准样式)，默认为Standard
- IsShowHiddenBox：用于获取或设置是否显示隐藏框，默认值true
- IsMovable：用于获取或设置WnGroup是否能够拖动，默认值true

#### WnWrapPanel

继承自FlowLayoutPanel，常用于单值控件自动排版布局。

##### 属性

- BorderStyle：用于获取或设置边框类型，可选值包括Line和None
- BorderColor：用于获取或设置边框的颜色，默认值为170,170,170
- ControlMargin：用于获取或设置子控件的间距，会把子控件的Margin属性值设置为该属性值

#### WnSplitPanel

继承自SplitContainer控件，常用于把一个窗体划分成不同的功能区域。

#### WnTab

继承自XtraTabControl控件，常用于按卡片页处理不同的业务。