# ContextMenuStrip 右键菜单

`AntdUI.ContextMenuStrip` 是静态右键菜单工具，可为 AntdUI/WinForms 控件打开现代样式菜单。菜单项使用 `ContextMenuStripItem`，分割线使用 `ContextMenuStripItemDivider`。

## 最小示例

```aardio
import win.ui;
import dotNet;
import dotNet.AntdUI;
/*DSG{{*/
var winform = win.form(text="AntdUI ContextMenuStrip";right=520;bottom=260)
winform.add(host={cls="custom";left=20;top=20;right=500;bottom=200;z=1})
/*}}*/

var button = AntdUI.Button(winform.host);
button.Text = "右键或单击显示菜单";

var itemType = AntdUI.ContextMenuStripItem("刷新").GetType();
var baseType = itemType.BaseType; // AntdUI.IContextMenuStripItem 抽象基类
var items = dotNet.createArray(baseType,3);
items.SetValue(AntdUI.ContextMenuStripItem("刷新","Ctrl+R"),0);
items.SetValue(AntdUI.ContextMenuStripItemDivider(),1);
items.SetValue(AntdUI.ContextMenuStripItem("退出"),2);

button.Click = function(sender,e){
    AntdUI.ContextMenuStrip.open(button,function(item){
        winform.msgbox("点击菜单：" + item.Text);
    },items);
}

winform.show();
win.loopMessage();
```

## 使用 Config 精细配置

```aardio
var cfg = AntdUI.ContextMenuStrip.Config(button,function(item){
    // item.Text / item.ID / item.Tag
},items,0);
cfg.SetRadius(8).SetAlign(AntdUI.TAlign.BR).SetTopMost(true);
AntdUI.ContextMenuStrip.open(cfg);
```

## 常用类型

### ContextMenuStrip.Config

- `Target/Control`：所属目标控件，aardio 中优先传 AntdUI/WinForms 控件。
- `Items`：`IContextMenuStripItem[]` 菜单项数组。
- `Call`：点击菜单项回调。
- `Align`：弹出方向，`AntdUI.TAlign`。
- `Radius`、`Gap`、`IconRatio`、`IconGap`：外观参数。
- `Location`：自定义弹出坐标。
- `OnClose`：关闭回调。

### ContextMenuStripItem

- `ID`：业务标识。
- `Text`：主文本。
- `SubText`：快捷键或辅助文本。
- `Icon` / `IconSvg`：图标。
- `Enabled`、`Checked`：禁用与选中。
- `Sub`：子菜单，类型同样是 `IContextMenuStripItem[]`。
- `Tag`：用户数据。

## 注意事项

- 目标控件必须是 AntdUI/WinForms 控件，不能直接传普通 aardio 控件。
- 菜单项数组建议用 `AntdUI.ContextMenuStripItem("刷新").GetType().BaseType` 取得 `AntdUI.IContextMenuStripItem` 抽象基类后创建。
- 子菜单的 `Sub` 也需要创建 `IContextMenuStripItem[]`。