Как сосредоточиться на владельце ToolStripControlHost в ToolStrip

Использование C# с.Net 2.0 (хотя проблема возникает в 4.0)

Кажется, есть ошибка, связанная с фокусом элемента управления ToolStrip и ToolStripControlHosts в Windows Forms.

Рассмотрим этот пример: пользователь нажимает на ToolStripMenuItem "Test A", а затем по диагонали перемещает мышь на выпадающий ToolStripMenuItem "5". При перетаскивании по диагонали мышь проходит над "Тестом B", но когда мышь входит в выпадающий список, фокус автоматически перемещается из "Теста B" в "Тест A". Это работает правильно.

Пример 1:

Теперь рассмотрим похожий пример, но с ToolStripControlHost в раскрывающемся списке. Мышь движется по диагонали, минуя "Тест B", который получает фокус. Когда мышь входит в ToolStripControlHost, фокус НЕ возвращается родительскому "Тесту A", и поэтому раскрывающийся список закрывается, а ToolStripControlHost скрывается.

Пример 2:

У меня вопрос, как я могу справиться с этой ситуацией? Есть ли способ заставить фокус на ToolStripMenuItem "Тест A"?

Я попытался установить для свойства autoclose значения DropDown "Test A" значение false, а затем вручную обработать событие закрытия, но это вызывает несколько проблем. При щелчке ToolStripControlHost ToolStrip получает событие OnClose, а ToolStripDropDownCloseReason является AppClicked. Кроме того, любые текстовые поля в ToolStripControlHost не получают текстовые события, потому что ToolStrip, кажется, потребляет их (возврат на одну позицию перемещает фокус вверх в раскрывающемся списке вместо удаления текста и т. Д.).

Спасибо за вашу помощь

Саймон

1 ответ

Итак, я столкнулся с похожими проблемами, когда хотел добавить элементы управления в элементы DropDown ToolStrip. Первая часть этого решения, по крайней мере, в моем случае, включала создание пользовательских UserControls, которые содержали все, что мне было нужно. Однако даже при этом у меня все еще были проблемы с фокусировкой, пока я не поместил все в LayoutControls. Все работало, как и ожидалось, за исключением DevExpress CheckedComboBoxEdit, поскольку он захватывает фокус, а без элемента DropDown, имеющего дескриптор, он теряет фокус и теряется.

Я также попытался управлять многими событиями и установить AutoClose в false, но это привело к возникновению других проблем.

Я предлагаю создать UserControl с LayoutControl, который будет содержать ваше текстовое поле (и другие элементы, если это необходимо). Это также позволит вам добавить любую дополнительную функциональность (события, привязку и т. Д.), Которую вы хотите подключить, в текстовое поле в коде за UserControl. Надеюсь, это поможет, дайте мне знать, если у вас есть дополнительные вопросы.

Другие вопросы по тегам