保留最后一个上下文菜单项

时间:2018-01-03 10:10:19

标签: c# winforms

我在菜单中添加了很多项目。在窗体右键单击菜单弹出窗口打开,用户可以向下滚动菜单项。当再次右键单击表单时,它应保留在用户滚动到的相同菜单项位置。

在VB 6中,它每次都会保留最后一个位置但是在C#中我无法实现它。

1 个答案:

答案 0 :(得分:2)

这实际上很容易实现,你只需要记住滚动位置:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        ContextMenuStrip = new ContextMenuStrip();
        for (int i = 0; i < 100; i++)
            ContextMenuStrip.Items.Add($"Menu {i:00}"); // add some items;

        // remember the scroll position upon closing and restore it upon opening menu
        var point = Point.Empty;
        ContextMenuStrip.VisibleChanged += (s, e) =>
        {
            if (ContextMenuStrip.Visible)
                ContextMenuStrip.AutoScrollOffset = point;
            else
                point = ContextMenuStrip.AutoScrollOffset;
        };
    }
}

在这个例子中,我使用ContextMenuStrip的相同实例,因此上面的代码没有做任何有用的事情。但是如果你动态生成上下文菜单,那么你可能想要记住旧菜单的AutoScrollOffset并将其设置为新菜单。