Modal 是模态对话框,适合删除确认、提交确认、错误详情、复杂内容展示等必须等待用户响应的场景。
在 aardio 中推荐使用 AntdUI.Modal.Config(...) 创建配置对象,再调用 AntdUI.Modal.open(cfg)。静态 Modal 需要 AntdUI 可识别的 owner,通常使用嵌入到 aardio custom 控件里的 AntdUI.BaseForm。
import win.ui;
import dotNet;
import dotNet.AntdUI;
import System.Windows.Forms;
var winform = win.form(text="AntdUI Modal";right=640;bottom=360)
winform.add(
customBase={cls="custom";left=0;top=0;right=640;bottom=360;z=1};
btn={cls="button";text="删除";left=40;top=40;right=160;bottom=76;z=2}
)
var baseForm = AntdUI.BaseForm(winform.customBase);
winform.btn.oncommand = function(){
var cfg = AntdUI.Modal.Config(baseForm,"删除确认","确定删除这条记录吗?",AntdUI.TType.Warn);
cfg.OkText = "删除";
cfg.CancelText = "取消";
cfg.MaskClosable = false;
cfg.Width = 420;
var result = AntdUI.Modal.open(cfg);
if(result == System.Windows.Forms.DialogResult.OK){
AntdUI.Message.open(AntdUI.Message.Config(baseForm,"已删除",AntdUI.TType.Success));
}
}
winform.show();
win.loopMessage();
Title:标题。Content:内容,可为字符串、控件、Modal.TextLine[] 等对象。Icon:状态图标,AntdUI.TType.Success/Info/Warn/Error。Width:对话框宽度。Mask / MaskClosable:遮罩与点击遮罩关闭。CloseIcon:右上角关闭图标。Keyboard:是否允许 Esc 关闭。OkText / CancelText:确认/取消按钮文字;CancelText = null 可隐藏取消按钮。OkType:确认按钮类型,AntdUI.TTypeMini.Primary/Warn/Error 等。DefaultAcceptButton / DefaultFocus:默认按钮与焦点。OnOk:确认回调,返回 true 表示通过。Btns / OnBtns:自定义按钮数组与按钮回调。Draggable:是否可拖拽。Resizable / MinimumSize / MaximumSize:是否可调整大小与大小限制。如果正文需要分行、局部配色或控制行距,可用 AntdUI.Modal.TextLine 数组作为内容。
import dotNet;
import dotNet.AntdUI;
var asm = dotNet.load("AntdUI",$"~\lib\dotNet\AntdUI\.res\AntdUI.dll");
var textLineType = asm.getType("AntdUI.Modal+TextLine");
var lines = dotNet.createArray(textLineType,2);
lines.SetValue(AntdUI.Modal.TextLine("即将删除:客户 A"),0);
lines.SetValue(AntdUI.Modal.TextLine("此操作不可恢复",6),1);
var cfg = AntdUI.Modal.Config(baseForm,"危险操作",lines,AntdUI.TType.Error);
cfg.OkText = "确认删除";
cfg.OkType = AntdUI.TTypeMini.Error;
AntdUI.Modal.open(cfg);
Modal.Btn 可添加除确定/取消外的业务按钮。aardio 中创建 .NET 数组时使用 dotNet.createArray,数组下标从 0 开始。
import dotNet;
import dotNet.AntdUI;
var asm = dotNet.load("AntdUI",$"~\lib\dotNet\AntdUI\.res\AntdUI.dll");
var btnType = asm.getType("AntdUI.Modal+Btn");
var btns = dotNet.createArray(btnType,2);
btns.SetValue(AntdUI.Modal.Btn("preview","预览",AntdUI.TTypeMini.Info),0);
btns.SetValue(AntdUI.Modal.Btn("delete","强制删除",AntdUI.TTypeMini.Error),1);
var cfg = AntdUI.Modal.Config(baseForm,"选择操作","请选择下一步操作",AntdUI.TType.Warn);
cfg.Btns = btns;
AntdUI.Modal.open(cfg);
Content 也可以是 WinForms/AntdUI 控件。适合在 Modal 中放表单、输入框或列表。
import dotNet.AntdUI;
import System.Windows.Forms;
import System.Drawing;
var panel = System.Windows.Forms.Panel();
panel.Size = System.Drawing.Size(360,120);
var label = System.Windows.Forms.Label();
label.Text = "这里可以放置更复杂的 WinForms / AntdUI 内容。";
label.Dock = System.Windows.Forms.DockStyle.Fill;
panel.Controls.Add(label);
var cfg = AntdUI.Modal.Config(baseForm,"复杂内容",panel,AntdUI.TType.Info);
cfg.Width = 480;
AntdUI.Modal.open(cfg);
AntdUI.Modal.open(cfg) 会返回 System.Windows.Forms.DialogResult,可与 DialogResult.OK/Cancel 比较。AntdUI.BaseForm,不要直接传 aardio win.form 或 hwnd。