#user-controls #vb6 #focus #activex
#пользовательские элементы управления #vb6 #фокус #activex
Вопрос:
при разработке моего пользовательского элемента управления я столкнулся со следующей проблемой:
я хотел бы установить UserControl.Может изменить значение Focus на false, что невозможно из-за сообщения об ошибке, сообщающего мне, что элемент управления, неспособный получить фокус, не может содержать элементы, которые могут получать фокус.
но поскольку я не хочу, чтобы они на самом деле получали какой-либо фокус, я хотел бы отключить это для дочерних объектов, а также для моего пользовательского элемента управления. я с трудом могу поверить, что нет возможности запретить дочерним элементам управления получать фокус, независимо от того, к какому типу они относятся? в настоящее время я использую imageboxes и pictureboxes.
уже выполнялся поиск с помощью Google, который всегда приводит к тому, что для свойства не может быть установлено значение false при этих условиях…
Комментарии:
1. Вы разрабатываете что-то новое в VB6? Мне жаль тебя.
2. Спасибо. к сожалению, другого способа нет
Ответ №1:
Если вы поместите picturebox во фрейм и отключите фрейм, он не будет получать события мыши. Выполнение этого в сочетании с установкой tabstop в false не позволит picturebox получать фокус.
Я использовал этот метод в прошлом для создания флажка usercontrol, который можно сделать доступным только для чтения.
Комментарии:
1. хорошая идея. но этот метод также отключает событие щелчка в той области, которая должна быть вызвана, что было бы необходимо… ну, я мог бы вставить что-то невидимое, например, метку, для получения события… необходимо проверить, продолжает ли picturebox отображаться, когда он отключен.
2. ну … это очень грязное, но все же лучшее решение для решения моей проблемы. большое спасибо всем вам, кто внес свой вклад. с уважением
Ответ №2:
Вы можете установить для свойства TabStop дочернего элемента управления значение False.
Комментарии:
1. это идея. но это, к сожалению, не решает проблему. поскольку фокус все еще может быть принят событиями мыши. : (
Ответ №3:
Вы пробовали просто использовать элементы управления изображениями? Если я правильно помню, они легкие и не должны захватывать фокус, тогда как PictureBox всегда сможет (теоретически) захватить фокус. В зависимости от ваших потребностей этого может быть достаточно.
Комментарии:
1. хотя это хорошая идея, но мысль, которая у меня уже была: мне нужно владеть частями элемента управления. для этого мне нужен контекст устройства, поэтому требуется picturebox . есть ли способ не допустить, чтобы picturebox принимал фокус?
Ответ №4:
Можете ли вы присвоить включенному свойству значение false?
Комментарии:
1. пользовательского элемента управления? ermm нет, поскольку щелчок и другие события все еще должны оцениваться…
Ответ №5:
Возможно, вы захотите взглянуть на эту статью.
http://support.microsoft.com/kb/180216
Похоже, у вас проблема. Единственный известный обходной путь — установить для свойства UserControl Enabled значение False вместо установки свойства CanGetFocus. Но тогда, конечно, вы не смогли бы реагировать на клики и прочее.
Комментарии:
1. К сожалению, статья предназначена для VB5. Никаких признаков статьи, в которой упоминается VB6.
Ответ №6:
Прошло некоторое время, но решение этой проблемы, которое мы использовали годами, состояло в том, чтобы перехватить событие received-focus (извините, не могу вспомнить, что это такое), а затем явно принудительно переключить фокус на что-то другое. Это запутанно и непросто (из-за капризов упорядочивания событий и переупорядочивания в VB / Com Windows), но работа выполнена.