using System; using System.Collections.Generic; using System.Windows.Forms; namespace Apewer.WinForm { /// Windows 窗体工具。 public static class Extensions { static void MenuItemEventHandler(object sender, EventArgs e) { #if NETFRAMEWORK var mi = sender as System.Windows.Forms.MenuItem; if (mi != null) { var tag = mi.Tag as MenuItem; if (tag != null && tag.Action != null) tag.Action.Invoke(tag); } #endif var tsmi = sender as System.Windows.Forms.ToolStripMenuItem; if (tsmi != null) { var tag = tsmi.Tag as MenuItem; if (tag != null && tag.Action != null) tag.Action.Invoke(tag); } } #if NETFRAMEWORK /// 生成 实例。 /// public static ContextMenu ContextMenu(this IEnumerable items) { if (items == null) throw new ArgumentNullException(nameof(items)); var cm = new ContextMenu(); foreach (var item in items) { var isLine = item == null || item.Text == null || item.Text == "" || item.Text == "-"; var text = isLine ? "-" : item?.Text; var mi = new System.Windows.Forms.MenuItem(text, MenuItemEventHandler); mi.Enabled = !isLine && item.Action != null; mi.Tag = item; cm.MenuItems.Add(mi); } return cm; } #endif /// 生成 实例。 /// public static ContextMenuStrip ContextMenuStrip(this IEnumerable items) { if (items == null) throw new ArgumentNullException(nameof(items)); var cms = new ContextMenuStrip(); foreach (var item in items) { if (item == null) continue; var isLine = item.Text == null || item.Text == "" || item.Text == "-"; var text = isLine ? "-" : item.Text; var tsmi = new ToolStripMenuItem(text, item.Image, MenuItemEventHandler); tsmi.AutoSize = true; tsmi.Height = isLine ? 19 : 30; tsmi.Enabled = item.Action != null && item.Action != null; tsmi.Tag = item; cms.Items.Add(tsmi); } return cms; } } }