gpt4 book ai didi

c# - 屏幕左上角出现动态生成的下拉菜单

转载 作者:行者123 更新时间:2023-11-30 16:36:20 25 4
gpt4 key购买 nike

我已将一些代码插入到 ToolStripMenuItem 的 MouseDown 和 Click 事件中以在运行时生成菜单,但菜单出现在屏幕的左上角而不是菜单项下方。不管代码是在 MouseDown 还是 Click 中,菜单总是在错误的位置。我做错了什么?

这是一个代码示例:

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();
}

最佳答案

将代码从 MouseDown 事件移动到 DropDownOpening事件;这应该会给你正确的行为。

关于c# - 屏幕左上角出现动态生成的下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/998620/

25 4 0