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

时间:2013-04-05 19:20:21

标签: c# .net 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

编辑(更新/说明):


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


现在,我的问题是只在第一次点击命令按钮时,ContextMenuStrip出现在菜单的顶部,而不是在命令按钮的顶部,因为我希望它

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

谢谢!

3 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:2)

Cursor.Position.XCursor.Position.Y与Form相关,您需要使用重载方法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));

答案 2 :(得分:2)

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

        printerToolStripMenuItem.ShowDropDown();
        toolStripComboBoxPrinter.Owner.Hide();
        printerToolStripMenuItem.Owner.Hide();