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

C# 保留最后一个上下文菜单项,c#,winforms,C#,Winforms,我在菜单上增加了许多项目。在窗体上,右键单击菜单弹出窗口打开,用户可以向下滚动菜单项。当再次右键单击表单时,它应该保留在用户向上滚动到的相同菜单项位置 在VB6中,每次都会保留最后一个位置,但在C#中,我无法实现它 这实际上很容易实现,您只需记住滚动位置: public partial class Form1 : Form { public Form1() { InitializeComponent(); ContextMenuStrip = n

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


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

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

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;
        };
    }
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
ContextMenuStrip=新的ContextMenuStrip();
对于(int i=0;i<100;i++)
ContextMenuStrip.Items.Add($“Menu{i:00}”);//添加一些项;
//关闭时记住滚动位置,打开菜单时恢复滚动位置
var point=point.Empty;
ContextMenuStrip.VisibleChanged+=(s,e)=>
{
if(ContextMenuStrip.Visible)
ContextMenuStrip.AutoScrolOffset=点;
其他的
point=ContextMenuStrip.AutoScrolOffset;
};
}
}

在这个例子中,我使用的是同一个
ContextMenuStrip
实例,所以上面的代码没有做任何有用的事情。但是,如果动态生成上下文菜单,则可能需要记住旧菜单的
autoscroloffset
,并将其设置为新菜单。

那么您想要滚动到某个项目吗。如果保存/保留最后一个(用户选择的)菜单和子菜单索引,则可以保留最后一个选择。在保留之前,请检查是否有最后的索引,如果有,请使用它来定位菜单,否则它将假定是第一次。实际上,C#class中的
ContextMenuStrip
实例应保持
AutoScrollOffset
属性值(即滚动位置)。您可能正在动态生成菜单?您能展示一下您添加项目和显示菜单的确切方式吗?也许它也与操作系统/框架版本有关。