我正在开发一个VB Winforms项目(虽然我对C#解决方案一样好)并且设置如下:
msCreateReports
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出现在菜单的顶部,而不是在命令按钮的顶部,因为我希望它
第一次点击后,菜单出现在正确的位置...我做错了什么/如何解决这个问题?
谢谢!
答案 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.X
和Cursor.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();