[AntdUI] 01 BaseForm的创建

nanyi 15小时前 73 v 1.0.0.0 2026-06-02

AntdUI介绍

基于 Ant Design 设计语言的 WinForm UI 界面库,致力于将现代美观的前端设计风格带入到桌面应用程序中。采用纯GDI绘图,不需任何图片资源,全面支持AOT,最低兼容 .NET Framework 4.0。


BaseForm

在 AntdUI 中,BaseForm 是一个增强的面板容器。它继承自 .NET 的 ContainerControl,可以像 Panel 一样装填按钮、输入框等控件。在接下来的演示中,AntdUI的控件都创建在BaseForm这个容器上。


import win.ui;
import dotNet.AntdUI;
import dotNet;
/*DSG{{*/
var winform = win.form(text="AntdUI BaseForm";right=451;bottom=281;border="thin";max=false)
winform.add(
custom_base={cls="custom";left=0;top=0;right=452;bottom=282;db=1;dl=1;dr=1;dt=1;z=1};
custom_btn_place={cls="custom";left=310;top=110;right=410;bottom=150;hide=1;z=3};
custom_input_place={cls="custom";left=30;top=110;right=290;bottom=150;hide=1;z=2};
custom_label_place={cls="custom";left=32;top=50;right=225;bottom=90;hide=1;z=4};
custom_theme_place={cls="custom";left=393;top=19;right=433;bottom=59;hide=1;z=5}
)
/*}}*/

// BaseForm
var baseForm = AntdUI.BaseForm(custom_base);
baseForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
baseForm.Dock = System.Windows.Forms.DockStyle.Fill;

// Lable
var p = winform.custom_label_place;
var label = AntdUI.Label();
label.Text = "Hello world.";
label.Location = System.Drawing.Point(p.left, p.top);
label.Size = System.Drawing.Size(p.right - p.left, p.bottom - p.top);
label.Font = System.Drawing.Font("Microsoft YaHei", dotNet.float(16));
label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
baseForm.Controls.Add(label);


// Input
p = winform.custom_input_place;
var input = AntdUI.Input();
input.Location = System.Drawing.Point(p.left, p.top);
input.Size = System.Drawing.Size(p.right - p.left, p.bottom - p.top);
input.PlaceholderText = "你好,世界。";
baseForm.Controls.Add(input);

// Submit
p = winform.custom_btn_place;
var submitBtn = AntdUI.Button();
submitBtn.Text = "提交";
submitBtn.Type = AntdUI.TTypeMini.Primary;
submitBtn.Location = System.Drawing.Point(p.left, p.top);
submitBtn.Size = System.Drawing.Size(p.right - p.left, p.bottom - p.top);
baseForm.Controls.Add(submitBtn);


// Theme button
p = winform.custom_theme_place;
var themeBtn = AntdUI.Button();
themeBtn.Text = "◐";
themeBtn.Radius = 20;
themeBtn.Location = System.Drawing.Point(p.left, p.top);
themeBtn.Size = System.Drawing.Size(p.right - p.left, p.bottom - p.top);
baseForm.Controls.Add(themeBtn);


// 转颜色(AntdUI 数值 -> .NET Color)
var toColor = function(rgbOrArgb){
    var r = (rgbOrArgb >> 16) & 0xFF;
    var g = (rgbOrArgb >> 8) & 0xFF;
    var b = rgbOrArgb & 0xFF;
    return System.Drawing.Color.FromArgb(255, r, g, b);
};

// 主题刷新
var isDark = false;
var applyTheme = function(){
    AntdUI.Config.IsDark = isDark;

    var bg = AntdUI.Style.Db.BgBase;
    var fg = AntdUI.Style.Db.Text;

    baseForm.BackColor = toColor(bg);

    // 可选:同步 aardio 背景减少边缘反差
    winform.custom_base.bgcolor = bg & 0xFFFFFF;

    baseForm.Refresh();
};

themeBtn.Click = function(sender,e){
    isDark = !isDark;
    applyTheme();
    sender.Text = isDark ? "◑" : "◐";
};

submitBtn.Click = function(sender,e){
    if(input.Text != ""){
        AntdUI.Modal.open(baseForm, "提交成功", "您输入的是:" + input.Text, AntdUI.TType.Success);
    }
    else{
        AntdUI.Modal.open(baseForm, "提交失败", "请在输入框内填写信息。", AntdUI.TType.Error);
    }
};


// 嵌入
dotNet.setParent(baseForm, winform.custom_base);

winform.show();
win.loopMessage();

*代码由AI编写

目前未解决bug,当窗口被移动后,Modal弹出对话框位置和大小还是会在窗口初始位置。

AntdUI Modal对话框相关文档:https://gitee.com/AntdUI/AntdUI/blob/main/doc/wiki/zh/Control/Modal.md


下期预告:AntdUI Button控件

最新回复 (3)
  • lcj21 9小时前
    0 2
    不错,学习了,感谢分享!
  • ccbwx 5小时前
    0 3
    感谢分享,期待下一集
  • netfox 2小时前
    0 4

    这使用成本太高了

返回