# System.Windows.Forms 库模块帮助文档

<details>  <summary>必读</summary>  <p>

## 构造并嵌入 .NET 控件

如果在 **aardio 界面线程** 内调用 .NET 控件构造函数，
并将第 1 构造参数指定为 aardio 控件，例如：

```aardio
var dataGridView = System.Windows.Forms.DataGridView(winform.custom); 
```

aardio 会自动将其转换为：

```aardio
var dataGridView = System.Windows.Forms.DataGridView();

/*
aardio 会设置 .NET 控件自动填满 aardio 窗口，并移除三维边框/双边框扩展样式，
同时会将 aardio 控件的禁用、显示、文本属性转移给 .NET 控件，忽略其他属性。
*/
System.Windows.Forms.CreateEmbed(dataGridView,winform.custom);
```

以简化调用代码。

建议加载 WinForm 控件的 .NET 程序集声明 isWinFormAssembly 属性为 true，
例如标准库 System.Windows.Forms 里就是这样写的：

```aardio
System.Windows.Forms.__assembly__[["isWinFormAssembly"]] = true; 
```

在 aardio 中调用 `System.Windows.Forms.DataGridView(winform.custom)` 时，
如果发现提供该 .NET 类的 .NET 程序集的 isWinFormAssembly 属性为 true ，
则会直接将代码优化为：

```aardio
var dataGridView = System.Windows.Forms.DataGridView();
System.Windows.Forms.CreateEmbed(dataGridView,winform.custom);
```

如果程序集指定了以下直接属性：
```aardio
[["baseFormClass"]] = System.Windows.Forms.Form;
```

则 aardio 会按  isWinFormAssembly 属性为 true 进行优化，
并且会使用指定的 baseFormClass 创建控件容器窗口（代替默认的 System.Windows.Forms.Form）。

否则会先调用  `System.Windows.Forms.DataGridView(winform.custom)` 一次，
在失败之后才会转换为 `System.Windows.Forms.DataGridView()` 与 ·System.Windows.Forms.CreateEmbed· 调用。

## 自定义 custom 控件的外观

创建 winform.custom 的参数表的 cls 字段可指定为:
"custom","custom.button","custom.edit","custom.checkbox","custom.radio","custom.trackbar"
其中之一。

这些都是 custom 控件的别名，  
唯一区别是在 aardio 窗口设计器显示的外观不同。  
例如 "custom.checkbox" 在窗体设计器中会显示为复选框。

custom 启用双边框（控件构造参数中指定`frame=1`）后在设计器中显示凸起边框，外观类似 button ，
启用三维边框时（控件构造参数中指定`edge=1`）后设计器中显示凹陷边框，外观类似 edit 。
嵌入 .NET 控件时默认会自动移除通过 `frame=1` 或 `edge=1` 创建的边框。

</p></details>

## System.Windows.Forms 成员列表 <a id="System.Windows.Forms" href="#System.Windows.Forms">&#x23;</a>

.NET System.Windows.Forms 命名空间  

[返回对象:dotNetNameSpaceObject](https://www.aardio.com/zh-cn/docs/library-reference/dotNet/appDomain.html#dotNetNameSpaceObject)

### System.Windows.Forms.* <a id="System.Windows.Forms.any" href="#System.Windows.Forms.any">&#x23;</a>
.NET 命名空间、类、结构体的成员，  
可访问成员命名空间、类、枚举、静态属性或字段，  
导入的类可用于构造 .Net 对象，传回 .Net 则自动转为该类的 Type 对象  

[返回对象:dotNetNameSpaceObject](https://www.aardio.com/zh-cn/docs/library-reference/dotNet/appDomain.html#dotNetNameSpaceObject)

### System.Windows.Forms.CreateEmbed <a id="System.Windows.Forms.CreateEmbed" href="#System.Windows.Forms.CreateEmbed">&#x23;</a>
嵌入 .NET 控件（或 .NET 窗体对象）到 aardio 窗口。  
此函数会为 .Net 控件创建无边框的 .NET 容器窗口，  
再嵌入到 aardio 窗口内。  
此函数也会自动移除 aardio 窗口的三维边框 / 双边框。   
同时会将 aardio 窗口的禁用、显示、文本属性转移给 .NET 控件，忽略其他属性。  
并设置 .NET 控件窗口填满并替代 aardio 窗口显示区域，并且同步缩放。  

如果调用 .NET 窗口或控件的构造函数并将参数指定为 aardio 窗口时会自动调用此函数。

### System.Windows.Forms.CreateEmbed(netCtrl,aardioForm,baseFormClass) <a id="System.Windows.Forms.CreateEmbed" href="#System.Windows.Forms.CreateEmbed">&#x23;</a>
嵌入 .NET 控件（或 .NET 窗体对象）到 aardio 窗口。  
@- netCtrl 参数可指定 .Net 控件,  
也可以指定 System.Windows.Forms 命名空间下的控件类名。  
@netCtrl 也可以指定 .NET 窗体对象（System.Windows.Forms.Form）。   
如果 @netCtrl 不是 Form 则会创建一个 Form 作为容器再嵌入到 aardio 窗口中。  
- @aardioForm 参数指定 aardio 中的 win.form 对象或 custom 控件  
- 可选用 @baseFormClass 自定义创建容器窗口的 .NET 类，  
默认为 System.Windows.Forms.Form 。

### System.Windows.Forms.assembly <a id="System.Windows.Forms.assembly" href="#System.Windows.Forms.assembly">&#x23;</a>
导入此 .NET 命名空间的程序集对象。  

[返回对象:dotNetCrlAssemblyObject](https://www.aardio.com/zh-cn/docs/library-reference/dotNet/appDomain.html#dotNetCrlAssemblyObject)
