我在鼠标中插入了一些代码,然后单击工具栏菜单项的事件以在运行时生成菜单,但菜单显示在屏幕的左上角,而不是菜单项下。不管代码是鼠标向下还是点击,菜单总是在错误的地方。我做错什么了?
以下是代码示例:
private void windowToolStripMenuItem_MouseDown(object sender, MouseEventArgs e)
{
windowToolStripMenuItem.BuildOpenWindowsDropDown(Program.windowManager, (Form f) => (f.SomeProperty == SomeValue));
}
扩展方法:
static class ExtensionMethods
{
public static void BuildOpenWindowsDropDown(this ToolStripDropDownItem toModify, WindowManager windowManager, Predicate<Form> constraint)
{
toModify.DropDownItems.Clear();
List<Form> windows = windowManager.FindOpenWindows(constraint);
if (windows != null)
{
windows.ForEach((Form f) =>
{
ToolStripItem tsi = toModify.DropDownItems.Add(f.Text);
tsi.Tag = f;
EventHandler clickHandler = new EventHandler(
(object sender, EventArgs e) =>
{
Form fToShow = (Form)((ToolStripItem)sender).Tag;
fToShow.Show();
});
tsi.Click += clickHandler;
});
}
}
}
以及WindowManager类中的代码段:
public List<Form> FindOpenWindows(Predicate<Form> constraint)
{
var foundTs = from form in windows
where constraint(form)
&& form.Created
select form;
return foundTs.ToList();
}