[AntdUI] 07 Timepicker等时间日期控件创建及事件处理

nanyi 16小时前 50 v 1.0.0.0 2026-06-21

 import win.ui;
import dotNet.AntdUI;
import dotNet;
/*DSG{{*/
var winform = win.form(text="AntdUI TimePicker / DatePicker / DatePickerRange";right=980;bottom=620;border="thin")
winform.add(
custom_base={cls="custom";left=0;top=0;right=982;bottom=620;ah=1;aw=1;db=1;disabled=1;dl=1;dr=1;dt=1;hide=1;z=1};
custom_btn_clear={cls="custom";left=530;top=315;right=665;bottom=358;dl=1;dt=1;z=14};
custom_btn_set_demo={cls="custom";left=375;top=315;right=510;bottom=358;dl=1;dt=1;z=13};
custom_btn_set_today={cls="custom";left=220;top=315;right=355;bottom=358;dl=1;dt=1;z=12};
custom_btn_toggle_status={cls="custom";left=685;top=315;right=850;bottom=358;dl=1;dt=1;z=15};
custom_date={cls="custom";left=220;top=154;right=470;bottom=198;dl=1;dt=1;z=7};
custom_date_tip={cls="custom";left=495;top=154;right=900;bottom=205;dl=1;dr=1;dt=1;z=8};
custom_lbl_date={cls="custom";left=42;top=160;right=210;bottom=192;dl=1;dt=1;z=6};
custom_lbl_range={cls="custom";left=42;top=230;right=210;bottom=262;dl=1;dt=1;z=9};
custom_lbl_time={cls="custom";left=42;top=90;right=210;bottom=122;dl=1;dt=1;z=3};
custom_range={cls="custom";left=220;top=224;right=620;bottom=268;dl=1;dt=1;z=10};
custom_range_tip={cls="custom";left=645;top=224;right=900;bottom=276;dl=1;dr=1;dt=1;z=11};
custom_status={cls="custom";left=42;top=442;right=910;bottom=570;db=1;dl=1;dr=1;dt=1;z=17};
custom_status_title={cls="custom";left=28;top=400;right=260;bottom=432;dl=1;dt=1;z=16};
custom_time={cls="custom";left=220;top=84;right=470;bottom=128;dl=1;dt=1;z=4};
custom_time_tip={cls="custom";left=495;top=84;right=900;bottom=132;dl=1;dr=1;dt=1;z=5};
custom_title={cls="custom";left=28;top=20;right=620;bottom=58;dl=1;dt=1;z=2}
)
/*}}*/

// Message.success 需要一个 AntdUI 窗体或控件作为归属对象。
var baseForm = AntdUI.BaseForm();
baseForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
baseForm.Dock = System.Windows.Forms.DockStyle.Fill;
dotNet.setParent(baseForm, winform.custom_base);

// ---------- 公共字体 ----------
var fontTitle = System.Drawing.Font("Microsoft YaHei", 14, System.Drawing.FontStyle.Bold);
var fontNormal = System.Drawing.Font("Microsoft YaHei", 10);
var fontTip = System.Drawing.Font("Microsoft YaHei", 9);

// ---------- 工具函数 ----------
var showSuccess = function(text){
    AntdUI.Message.success(baseForm, text);
}

var addHostLabel = function(host,text,font){
    var label = AntdUI.Label(host);
    label.Text = text;
    label.Font = font || fontNormal;
    label.Dock = System.Windows.Forms.DockStyle.Fill;
    return label;
}

var makeRangeValue = function(startDate,endDate){
    var arr = System.Array.CreateInstance(System.DateTime,2);
    arr.SetValue(startDate,0);
    arr.SetValue(endDate,1);
    return arr;
}

var formatDate = function(dt){
    if(!dt) return "<null>";
    return dt.ToString("yyyy-MM-dd");
}

var formatDateTime = function(dt){
    if(!dt) return "<null>";
    return dt.ToString("yyyy-MM-dd HH:mm:ss");
}

var formatTime = function(ts){
    if(!ts) return "<null>";
    return tostring(ts);
}

var formatRange = function(arr){
    if(!arr || arr.Length < 2) return "<empty>";
    return arr.GetValue(0).ToString("yyyy-MM-dd") + " ~ " + arr.GetValue(1).ToString("yyyy-MM-dd");
}

// ---------- 标题 ----------
addHostLabel(winform.custom_title,"TimePicker / DatePicker / DatePickerRange",fontTitle);

addHostLabel(winform.custom_lbl_time,"TimePicker",fontNormal);
addHostLabel(winform.custom_lbl_date,"DatePicker",fontNormal);
addHostLabel(winform.custom_lbl_range,"DatePickerRange",fontNormal);
addHostLabel(winform.custom_status_title,"Event log / Current values",fontTitle);

// ---------- TimePicker ----------
var timePicker = AntdUI.TimePicker(winform.custom_time);
timePicker.Dock = System.Windows.Forms.DockStyle.Fill;
timePicker.Font = fontNormal;
timePicker.Format = "HH:mm:ss";
timePicker.Value = System.TimeSpan(9,30,0);
timePicker.PlaceholderText = "Select time";
timePicker.AllowClear = true;
timePicker.ShowButtonNow = true;
timePicker.PrefixText = "Time";
timePicker.Radius = 6;
timePicker.Status = AntdUI.TType.None;
timePicker.Placement = AntdUI.TAlignFrom.Bottom;

addHostLabel(
    winform.custom_time_tip,
    "Format=HH:mm:ss, AllowClear=true, ShowButtonNow=true, PrefixText/SuffixText",
    fontTip
);

// ---------- DatePicker ----------
var datePicker = AntdUI.DatePicker(winform.custom_date);
datePicker.Dock = System.Windows.Forms.DockStyle.Fill;
datePicker.Font = fontNormal;
datePicker.Format = "yyyy-MM-dd";
datePicker.Value = System.DateTime(2026,6,3);
datePicker.MinDate = System.DateTime(2026,1,1);
datePicker.MaxDate = System.DateTime(2026,12,31);
datePicker.PlaceholderText = "Select date";
datePicker.AllowClear = true;
datePicker.ShowButtonToDay = true;
datePicker.PrefixText = "Date";
datePicker.Radius = 6;
datePicker.Status = AntdUI.TType.None;
datePicker.Placement = AntdUI.TAlignFrom.Bottom;

addHostLabel(
    winform.custom_date_tip,
    "Format=yyyy-MM-dd, MinDate/MaxDate limited in 2026, ShowButtonToDay=true",
    fontTip
);

// ---------- DatePickerRange ----------
var rangePicker = AntdUI.DatePickerRange(winform.custom_range);
rangePicker.Dock = System.Windows.Forms.DockStyle.Fill;
rangePicker.Font = fontNormal;
rangePicker.Format = "yyyy-MM-dd";
rangePicker.Value = makeRangeValue(System.DateTime(2026,6,1),System.DateTime(2026,6,30));
rangePicker.MinDate = System.DateTime(2026,1,1);
rangePicker.MaxDate = System.DateTime(2026,12,31);
rangePicker.PlaceholderStart = "Start date";
rangePicker.PlaceholderEnd = "End date";
rangePicker.AllowClear = true;
rangePicker.Radius = 6;
rangePicker.Status = AntdUI.TType.None;
rangePicker.Placement = AntdUI.TAlignFrom.Bottom;

addHostLabel(
    winform.custom_range_tip,
    "Date range, Value is System.DateTime[]",
    fontTip
);

// ---------- 状态显示 ----------
var lblStatus = AntdUI.Label(winform.custom_status);
lblStatus.Font = fontTip;
lblStatus.Dock = System.Windows.Forms.DockStyle.Fill;
lblStatus.Text = "";

var logText = "";

var appendLog = function(text){
    logText = time().format("%H:%M:%S") + "  " + text + '\r\n' + logText;
    lblStatus.Text = logText;
}

var refreshStatus = function(){
    appendLog(
        "Current values => Time: " + formatTime(timePicker.Value)
        + "    Date: " + formatDate(datePicker.Value)
        + "    Range: " + formatRange(rangePicker.Value)
    );
}

refreshStatus();

// ---------- 事件演示 ----------
timePicker.ValueChanged = function(sender,e){
    appendLog("TimePicker.ValueChanged: " + formatTime(e.get_Value()));
}

timePicker.ClearClick = function(sender,e){
    appendLog("TimePicker.ClearClick");
}

timePicker.ExpandDropChanged = function(sender,e){
    appendLog("TimePicker.ExpandDropChanged: " + tostring(e.get_Value()));
}

datePicker.ValueChanged = function(sender,e){
    appendLog("DatePicker.ValueChanged: " + formatDateTime(e.get_Value()));
}

datePicker.ClearClick = function(sender,e){
    appendLog("DatePicker.ClearClick");
}

datePicker.ExpandDropChanged = function(sender,e){
    appendLog("DatePicker.ExpandDropChanged: " + tostring(e.get_Value()));
}

rangePicker.ValueChanged = function(sender,e){
    appendLog("DatePickerRange.ValueChanged: " + formatRange(e.get_Value()));
}

rangePicker.ClearClick = function(sender,e){
    appendLog("DatePickerRange.ClearClick");
}

rangePicker.ExpandDropChanged = function(sender,e){
    appendLog("DatePickerRange.ExpandDropChanged: " + tostring(e.get_Value()));
}

// ---------- 操作按钮 ----------
var btnSetToday = AntdUI.Button(winform.custom_btn_set_today);
btnSetToday.Text = "Set Today";
btnSetToday.Font = fontNormal;
btnSetToday.Type = AntdUI.TTypeMini.Primary;
btnSetToday.Dock = System.Windows.Forms.DockStyle.Fill;
btnSetToday.Click = function(sender,e){
    var now = System.DateTime.Now;
    timePicker.Value = now.TimeOfDay;
    datePicker.Value = now.Date;
    rangePicker.Value = makeRangeValue(now.Date,now.Date.AddDays(7));

    refreshStatus();
    showSuccess("Set to today");
}

var btnSetDemo = AntdUI.Button(winform.custom_btn_set_demo);
btnSetDemo.Text = "Set Demo";
btnSetDemo.Font = fontNormal;
btnSetDemo.Dock = System.Windows.Forms.DockStyle.Fill;
btnSetDemo.Click = function(sender,e){
    timePicker.Value = System.TimeSpan(18,45,30);
    datePicker.Value = System.DateTime(2026,10,1);
    rangePicker.Value = makeRangeValue(System.DateTime(2026,10,1),System.DateTime(2026,10,7));

    refreshStatus();
    showSuccess("Set demo values");
}

var btnClear = AntdUI.Button(winform.custom_btn_clear);
btnClear.Text = "Clear";
btnClear.Font = fontNormal;
btnClear.Type = AntdUI.TTypeMini.Warn;
btnClear.Dock = System.Windows.Forms.DockStyle.Fill;
btnClear.Click = function(sender,e){
    timePicker.Clear();
    datePicker.Clear();
    rangePicker.Clear();

    refreshStatus();
    showSuccess("All pickers cleared");
}

var btnToggleStatus = AntdUI.Button(winform.custom_btn_toggle_status);
btnToggleStatus.Text = "Toggle Status";
btnToggleStatus.Font = fontNormal;
btnToggleStatus.Type = AntdUI.TTypeMini.Default;
btnToggleStatus.Dock = System.Windows.Forms.DockStyle.Fill;
btnToggleStatus.Click = function(sender,e){
    if(timePicker.Status == AntdUI.TType.None){
        timePicker.Status = AntdUI.TType.Success;
        datePicker.Status = AntdUI.TType.Warn;
        rangePicker.Status = AntdUI.TType.Error;
        appendLog("Status changed: Time=Success, Date=Warn, Range=Error");
    }
    else {
        timePicker.Status = AntdUI.TType.None;
        datePicker.Status = AntdUI.TType.None;
        rangePicker.Status = AntdUI.TType.None;
        appendLog("Status changed: all None");
    }
}

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

下期预告:Calendar日历控件的创建

最新回复 (3)
  • Mr_MAO 15小时前
    0 2

    感谢分享!


  • lcj21 7小时前
    0 3
    效果很好,感谢分享!
  • ccbwx 6小时前
    0 4
    节日还在更新,辛苦拉!
返回