1

将 C# 与 .Net 2.0 一起使用(尽管问题出现在 4.0 中)

似乎存在涉及 Windows 窗体中 ToolStrip 控件和 ToolStripControlHosts 焦点的错误。

考虑这个例子:用户单击 ToolStripMenuItem“Test A”,然后将鼠标斜向移动到下拉 ToolStripMenuItem“5”上。对角拖动时鼠标经过“Test B”,但当鼠标进入下拉列表时,焦点会自动从“Test B”移回“Test 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”上?

我尝试将“Test A”的 DropDown 的 autoclose 属性设置为 false,然后手动处理 close 事件,但这会导致几个问题。单击 ToolStripControlHost 时,ToolStrip 会收到一个 OnClose 事件,其中 ToolStripDropDownCloseReason 被 AppClicked。此外,ToolStripControlHost 中的任何文本框都不会接收文本事件,因为 ToolStrip 似乎正在使用它们(退格键在下拉列表中将焦点向上移动,而不是删除文本等)。

谢谢你的帮助

西蒙

4

1 回答 1

0

因此,当我想将控件添加到 ToolStrip 的 DropDown 项中时,我遇到了类似的问题。该解决方案的第一部分,至少在我的情况下,涉及创建包含我需要的所有内容的自定义用户控件。但是,即使这样做,在将所有内容都放入 LayoutControls 之前,我仍然会遇到焦点问题。一切都按预期工作,除了 DevExpress CheckedComboBoxEdit,因为它抓住了焦点,并且没有 DropDown 项目有句柄,它失去焦点并丢失。

我还尝试管理很多事件,并将 AutoClose 设置为 false,但它最终产生了其他问题。

我的建议是创建一个带有 LayoutControl 的 UserControl 来包含您的文本框(以及其他必要的项目)。这也将允许您在 UserControl 后面的代码中将您想要挂钩的任何附加功能(事件、绑定等)放入文本框中。我希望这会有所帮助,如果您有任何其他问题,请告诉我。

于 2013-10-25T02:46:56.227 回答