У меня есть пользовательский элемент управления, который ведет себя аналогично элементу управления вкладкой.
Заголовки вкладок - это экземпляры UserControl, которые переопределяют события Paint, чтобы они выглядели индивидуально.
Чтобы использовать события проверки для различных элементов управления на наших страницах вкладок, когда пользователь нажимает на заголовки вкладок, мы устанавливаем фокус на пользовательский элемент управления TabHeader.
Я заметил, что Control.Focus() иногда возвращает false, но в документации не говорится, почему Control.Focus() когда-либо возвращает false, кроме того, что элемент управления не может получить фокус. Но я не знаю почему.
Вот что я вижу:
Если мой TabHeaderUserControl не содержит субэлементов управления, и я вызываю myControl.Focus() из события MouseClick, фокус возвращает true.
Если мой TabHeaderUserControl содержит подэлемент управления, и я вызываю myControl.Focus() из события MouseClick, фокус возвращает false.
Если мой TabHeaderUserControl содержит подэлемент управления, и я вызываю myControl.subControl.Focus() из события myControl.MouseClick, фокус возвращает true.
Кто-нибудь может это объяснить?





Вызов Focus() на UserControl выбирает первый дочерний элемент управления этого UserControl. Это действительно объяснило бы ваше поведение.
Вы можете попробовать вызвать в Select() вместо Focus() и посмотреть, работает ли это.
Вы пробовали "Control.ContainsFocus"? Предполагается, что он вернет true, если какой-либо из дочерних элементов управления сфокусирован на нем. Ссылка MSDN
Спасибо, Джеймс
Несмотря на то, что этому ответу было несколько лет, это решение сработало для меня. У меня был пользовательский элемент управления, который был включен при щелчке по узлу в древовидном представлении, и в зависимости от того, добавлял, редактировал или удалял пользователь, другой элемент управления в пользовательском элементе управления нуждался в фокусе. Select () работал как шарм. Спасибо.