我在菜单中添加了很多项目。在窗体右键单击菜单弹出窗口打开,用户可以向下滚动菜单项。当再次右键单击表单时,它应保留在用户滚动到的相同菜单项位置。
在VB 6中,它每次都会保留最后一个位置但是在C#中我无法实现它。
答案 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
并将其设置为新菜单。