Как сосредоточиться на владельце 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 скрывается.
У меня вопрос, как я могу справиться с этой ситуацией? Есть ли способ заставить фокус на 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. Надеюсь, это поможет, дайте мне знать, если у вас есть дополнительные вопросы.