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