4

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

  • 我在表单上有一个 ContextMenuStrip,msCreateReports
  • 我在表单顶部有一个 MenuStrip,其中一个菜单项被Create Reports设置DropDownmsCreateReports
  • 我在表单上有一个命令按钮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

编辑(更新/解释):


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


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

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

谢谢!!

4

3 回答 3

4

我有同样的问题(我使用的是 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;
}

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

于 2013-04-24T08:47:03.230 回答
2

Cursor.Position.X并且Cursor.Position.Y是相对于 Form 的,需要使用 Overloaded 方法ContextMenuStrip.Show(Control control, Point pos)

例子 :

//control = the control you have added context menu
msCreateReports.Show(control, new Point(Cursor.Position.X, Cursor.Position.Y));
于 2013-04-05T19:26:41.533 回答
2

我有同样的问题。我相信这也是一个错误,因为这种行为只发生在第一次。所以我强迫它在用户有机会与之交互之前打开然后关闭它。所以实际上我在用户使用它之前使用它一次,然后它就会正确运行。这是我在表单加载方法中添加的代码。我的组合框用于允许用户从打印机列表中进行选择。

        printerToolStripMenuItem.ShowDropDown();
        toolStripComboBoxPrinter.Owner.Hide();
        printerToolStripMenuItem.Owner.Hide();
于 2015-05-22T21:15:34.573 回答