2012-04-26 69 views
1

使用C#與.net 2.0(雖然在4.0出現問題)如何保持在ToolStripControlHost的所有者焦點在ToolStrip的

似乎有涉及ToolStrip控件的ToolStripControlHosts Windows窗體的重點和錯誤。考慮這個例子:用戶點擊ToolStripMenuItem「測試A」,然後將鼠標對角地移動到ToolStripMenuItem下拉菜單「5」上。當鼠標經過「測試B」對角線拖動時,但當鼠標進入下拉列表時,焦點自動從「測試B」移回「測試A」。這工作正常。

例1:http://i.stack.imgur.com/0X9mZ.png

現在考慮一個類似的例子,但與ToolStripControlHost在下拉列表中。鼠標斜向移動,經過接受焦點的「測試B」。當鼠標進入ToolStripControlHost時,焦點不會返回給父節點「Test A」,因此下拉列表關閉,並且ToolStripControlHost被隱藏。

例2:http://i.stack.imgur.com/XJ75K.png

我的問題是,我該怎麼處理這種情況?有沒有辦法將焦點強制到ToolStripMenuItem「測試A」上?

我已經嘗試將「測試A」的DropDown的autoclose屬性設置爲false,然後手動處理關閉事件,但這會導致幾個問題。當單擊ToolStripControlHost時,ToolStrip會收到一個OnClick事件,ToolStripDropDownCloseReason被AppClicked。此外,ToolStripControlHost中的任何文本框都不會接收文本事件,因爲ToolStrip似乎正在消耗它們(退格將焦點移到下拉列表中,而不是刪除文本等)。

感謝您的幫助

西蒙

+0

微軟術語「拖動」是指在鼠標按鈕關閉的情況下移動鼠標。我想你想說「移動」而不是「拖動」? – Elmue 2014-11-28 12:30:57

回答

0

所以,我遇到了類似的問題時,我想控制加入到ToolStrip中的下拉項。至少在我的情況下,這個解決方案的第一部分涉及創建包含我需要的所有東西的自定義用戶控件。但是,即使這樣做,我仍然有焦點問題,直到我把所有東西放入LayoutControls。除了DevExpress CheckedComboBoxEdit,一切都按預期工作,因爲它抓住焦點,沒有DropDown項目有句柄,它會失去焦點並丟失。

我也嘗試管理很多事件,並將AutoClose設置爲false,但最終導致了其他問題。

我的建議是創建一個帶有LayoutControl的UserControl來包含您的文本框(如果需要,還包含其他項目)。這也可以讓你把任何額外的功能(事件,綁定等),你想掛鉤到UserControl後面的代碼中的文本框中。我希望這會有所幫助,如果您還有其他問題,請告訴我。

相關問題