# 从 C# 示例迁移到 aardio

AntdUI 官方示例主要是 C# WinForms。迁移到 aardio 时，核心是把创建控件的逻辑改为“aardio custom 宿主 + AntdUI 构造”。

## 基本对照

C#：

```csharp
var btn = new AntdUI.Button();
btn.Text = "提交";
btn.Click += (s,e) => { };
```

aardio：

```aardio
var btn = AntdUI.Button(winform.host);
btn.Text = "提交";
btn.Click = function(sender,e){
    
}
```

## 多控件迁移示例

C# 示例常把多个控件直接加到 `this.Controls`。在 aardio 中，如果一个 `custom` 宿主内要放多个 AntdUI/WinForms 子控件，建议先创建 `AntdUI.BaseForm`：

```aardio
import win.ui;
import dotNet.AntdUI;
import System.Drawing;

var winform = win.form(text="迁移 C# 示例";right=520;bottom=260);
winform.add(host={cls="custom";left=0;top=0;right=520;bottom=260;z=1});

var baseForm = AntdUI.BaseForm(winform.host);

var input = AntdUI.Input();
input.Parent = baseForm;
input.Location = System.Drawing.Point(30,30);
input.Size = System.Drawing.Size(260,38);
input.PlaceholderText = "请输入内容";

var btn = AntdUI.Button();
btn.Parent = baseForm;
btn.Location = System.Drawing.Point(310,30);
btn.Size = System.Drawing.Size(120,38);
btn.Text = "提交";
btn.Type = AntdUI.TTypeMini.Primary;
btn.Click = function(sender,e){
    input.Text = "已提交";
}

winform.show();
win.loopMessage();
```

## 常见差异

- C# 的 `new AntdUI.Xxx()` 在 aardio 中通常写为 `AntdUI.Xxx()` 或 `AntdUI.Xxx(winform.host)`，aardio 中不需要 `new` 关键字。
- C# 事件 `+=` 改为 aardio 属性赋值回调（使用 `=` 而不是 `+=`）。在 aardio 中对 event 赋值总是追加而不是覆盖（对delegate 赋值则总是覆盖而不是追加）。
- .NET 集合 `Items.Add(...)`、`Controls.Add(...)` 的用法保持不变。
- .NET 索引通常从 0 开始，aardio 数组从 1 开始。在 aardio 中如果对 .NET 对象直接使用下标操操作符会自动将索引从 1-based(aardio) 转换为 0-based(.NET)，例如 `netObj[1]` 会被 aardio 转换为 `netObj.Item[0]`。但如果不是直接使用下标操作符（例如调用 .NET 函数时传参、对 Item 使用下标操作符） aardio 则不会对 .NET 索引值执行 `1-based » 0-based` 转换。
- C# 的 lambda/委托在 aardio 中通常写为 `function(sender,e){}`。需要注意 aardio 中的 lambda 表达式 `lambda (){}` 里的 `{}` 是表构造器而不是用于包围语句块的标记。
- C# 中的 `System.Drawing.Point/Size/Padding` 在 aardio 中可直接导入对应 .NET 命名空间后调用。
- .NET 的 `System.Drawing.Color` 在 aardio 中就是 `0xAARRGGBB` 格式数值；将该数值传给 .NET 颜色属性时会自动转换为 `System.Drawing.Color`。此格式与 GDI+、gdip 库及 plus 控件运行时颜色兼容，不需要调用 `System.Drawing.Color.FromArgb(...)`。
- 在 aardio 中 .NET 的枚举自动转换为数值， aardio 数值也可自动转换为 .NET 枚举参数。如果可以确定不会变动的枚举直接写数值实际上可以加快速度（大多时候影响微小可以忽略不计，但密集调用时可以减少不必要的读取属性操作，这对于动态语言尤其重要）。