如何在工具条中关注 ToolStripControlHost 的所有者
本文关键字:ToolStripControlHost 所有者 工具 | 更新日期: 2023-09-27 18:32:27
将C#与.Net 2.0一起使用(尽管问题出现在4.0中)
似乎有一个错误涉及 Windows 窗体中的 ToolStrip 控件和 ToolStripControlHosts 的焦点。
考虑以下示例:用户单击ToolStripMenuItem "Test A",然后将鼠标对角移动到下拉 ToolStripMenuItem "5" 上。对角线拖动时,鼠标经过"测试 B",但当鼠标进入下拉列表时,焦点会自动从"测试 B"移回"测试 A"。这工作正常。
示例1:https://i.stack.imgur.com/0X9mZ.png
现在考虑一个类似的示例,但在下拉列表中有一个 ToolStripControlHost。鼠标沿对角线移动,经过接收焦点的"测试 B"。当鼠标进入 ToolStripControlHost 时,焦点不会返回到父"测试 A",因此下拉列表关闭并且 ToolStripControlHost 被隐藏。
例2:https://i.stack.imgur.com/XJ75K.png
我的问题是,我该如何处理这种情况?有没有办法强制焦点到ToolStripMenuItem "Test A"上?
我尝试将"测试 A"的下拉列表的自动关闭属性设置为 false,然后手动处理关闭事件,但这会导致几个问题。单击 ToolStripControlHost 时,ToolStrip 会收到一个 OnClose 事件,其中 ToolStripDropDownCloseReason 为 AppClicked。此外,ToolStripControlHost 中的任何文本框都不会接收文本事件,因为 ToolStrip 似乎正在使用它们(退格键在下拉列表中将焦点向上移动,而不是删除文本等)。
感谢您的帮助
西蒙
因此,当我想将控件添加到 ToolStrip 的下拉项中时,我遇到了类似的问题。此解决方案的第一部分(至少就我而言)涉及创建自定义用户控件,其中包含我需要的所有内容。但是,即使这样做,我仍然有焦点问题,直到我把所有内容都放到布局控件中。一切都按预期工作,除了 DevExpress CheckedComboBoxEdit,因为它抓住焦点,并且没有 DropDown 项的句柄,它会失去焦点并丢失。
我还尝试管理许多事件,并将AutoClose设置为false,但最终会产生其他问题。
我的建议是创建一个带有布局控件的用户控件,以包含您的文本框(如有必要,还有其他项)。这还允许您将要挂钩到用户控件后面代码中的文本框的任何其他功能(事件、绑定等)。我希望这有所帮助,如果您有任何其他问题,请告诉我。