2011-07-26 69 views
3

我試圖讓我的上下文菜單留在屏幕上,即使我點擊了其下拉菜單項之一(當按下shift鍵時,儘管我認爲不重要問題)。當你點擊開始>所有程序>附件> [現在點擊你的shift鍵]並點擊Windows資源管理器時,你可以看到Windows XP中的行爲示例。菜單保持不變。防止ToolStripMenuItem上下文菜單從關閉點擊

這是一個C#應用程序,使用的WinForms,開發機器是Windows 7中,生產或者是XP,Vista或7

的toolstripmenuitem似乎並不具有closing事件;只有一個closed之一。熟悉closing事件的人會知道,您可以設置cancel標誌來防止控制關閉。

此外,當我嘗試從其click事件或其closed事件中重新顯示它的變通辦法時,它不起作用。雖然這在當前是一種可以接受的解決方法,但並不適用於生產。

任何建議或相關信息greely表示讚賞。

謝謝

+0

更多信息:我想阻止關閉的菜單是從上下文菜單中向下兩級,並且是動態構建的。只有父級情況菜單纔有關閉事件,如果我在該事件中取消關閉,行爲似乎是上下文菜單保持不變,一級關閉也保持關閉,但最後一級關閉。在這一點上,我開始玩弄最後一級的autoclose屬性設置爲false,雖然這似乎有效,但其他事件的其他惡劣副作用在將autoclose設置爲true時不再觸發。 – Flood

回答

5

我能夠在被點擊通過設置它的父下拉菜單中的自動關閉屬性設置爲「假」有我的文本菜單停留在屏幕上的動態創建的子菜單是這樣的:

ParentMenu.DropDown.AutoClose = false; 

其中ParentMenu是ToolStripMenuItem

使用下拉的家長ToolStripDropDownMenu的結束活動通過設置一個「取消」標誌是不是一個可行的解決方案,因爲它造成不一致的顯示/隱藏其任2級父菜單的行爲,以及以達致這在屏幕上引起意想不到的視覺僞影,以後在通過代碼隱藏時無法擺脫。它也似乎導致動態創建的菜單的父項的某些事件不再觸發,例如其MouseEnter事件。

在此經歷中有趣的發現是,儘管Visual Studio 2010的智能感知列出了上下文菜單項的DropDownLostFocus事件;當將此事件添加到動態創建的菜單時,它不會被觸發;這顯然是一個已知的行爲,如提到的here

0

ToolStripDropDownMenu有關閉事件。

+0

謝謝安德斯。我昨天閱讀了你的評論,我一直在探討這個和其他一些想法,但是一個解決方案還沒有出現。 – Flood

2

這是我最終使用的。使用此方法時,僅當鼠標指針位於下拉控件上時,下拉列表的自動關閉才被禁用。 MyMenuItemToolStripMenuItem

AddHandler MyMenuItem.DropDown.MouseEnter, AddressOf DisableDropMenuClose 
AddHandler MyMenuItem.DropDown.MouseLeave, AddressOf EnableDropMenuClose 

Private Sub DisableDropMenuClose(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    CType(sender, ToolStripDropDownMenu).AutoClose = False 
End Sub 

Private Sub EnableDropMenuClose(ByVal sender As System.Object, ByVal e As System.EventArgs) 
    CType(sender, ToolStripDropDownMenu).AutoClose = True 
End Sub 
+0

您的解決方案適用於我。我將我的方法重命名爲MyDropDown_MouseEnter和MyDropDown_MouseLeave。這樣,該方法似乎並不依賴於一個功能。 – JDennis