C# 快捷菜单ContextMenuStrip一种用法

C# 快捷菜单ContextMenuStrip一种用法

软件中常用快捷菜单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扩展方法

用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);
    }
}
打赏