软件中常用快捷菜单ContextMenuStrip,当快捷菜单较多时,写在同一个页面,页面的业务逻辑就比较多了,因此,将快捷菜单的响应和界面分开更好。
设置了显示文本和点击响应。可根据需要适当扩展。
public abstract class MenuItem { protected MenuItem(string text) { this.text = text; } private readonly string text; public string Text { get { return text; } } public abstract void Click(params object[] args); }
子类中设置显示默认文本或者创建时指定文本。可将params传入的参数转换成具体的强类型参数,然后处理具体的业务。
class NewMenuItem : MenuItem { public NewMenuItem() : base("文本") { } public NewMenuItem(string text) : base(text) { } public override void Click(params object[] args) { //TODO:... } }
用ContextMenuStrip的实例直接调用即可。AddNewMenuItem可传入具体的参数。
public static class ContextMenuStripExtensions { private static void AddMenuItem( this ContextMenuStrip contextMenuStrip, MenuItem menuItem, params object[] args) { var item = contextMenuStrip.Items.Add(menuItem.Text); item.Click += (sender, e) => { menuItem.Click(args); }; } public static void AddNewMenuItem(this ContextMenuStrip contextMenuStrip) { var menuItem = new NewMenuItem(); contextMenuStrip.AddMenuItem(menuItem); } }