为什么我的 MenuStrip 在第一次单击时出现在错误的位置?

Joh*_*tos 4 .net c# vb.net winforms

我正在开发一个 VB Winforms 项目(尽管我对 C# 解决方案也很满意)并进行了以下设置:

  • 我在表单上有一个 ContextMenuStrip,msCreateReports
  • 我在表单顶部有一个 MenuStrip,其中有一个菜单项,Create Reports并将其DropDown设置为msCreateReports
  • 我在表单上有一个命令按钮cmdCreateReports

现在,对于我的命令按钮,我为其click事件提供了以下代码:

Private Sub cmdCreateReports_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCreateReports.Click
    msCreateReports.Show(Cursor.Position.X, Cursor.Position.Y)
End Sub
Run Code Online (Sandbox Code Playgroud)

编辑(更新/解释):


基本上,我正在寻找的功能是让这个 contextmenustrip 能够显示在两个不同的位置之一,具体取决于用户单击的位置...如果他们单击菜单选项,上下文菜单将显示为Create Reports菜单项上的下拉菜单,或者如果用户单击命令按钮,菜单将在鼠标指针一侧显示为上下文菜单。我希望相同的菜单能够出现在这两个位置之一,具体取决于用户单击的位置以显示此菜单。


现在,我的问题是,只有第一次单击命令按钮时,ContextMenuStrip 才会出现在菜单顶部,而不是像我希望的那样出现在命令按钮顶部。

第一次单击后,菜单出现在正确的位置...我做错了什么/如何解决这个问题?

谢谢!!

Sim*_*ier 5

我有同样的问题(我使用的是 Visual Studio 2010 SP1 和 C#)。我不认为我们做错了什么,对我来说这看起来像是一个 Winforms 错误。

我是这样修复的:

1)我已经取消设置(使用视觉设计器)DropDown主条带项目的属性。

2)我已经在 contextMenuStrip 上定义了 Opening 事件,并在主条带项目上定义了 DropDownOpening 事件,如下所示:

private void toolStripMyMenuItem_DropDownOpening(object sender, EventArgs e)
{
    toolStripMyMenuItemMyLists.DropDown = contextMenuStrip;
}

private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
{
    toolStripMyMenuItemMyLists.DropDown = contextMenuStrip;
}
Run Code Online (Sandbox Code Playgroud)

我不再有这个问题了。希望它也能帮助你:-)