Удалить способность пользовательского элемента управления получать фокус

#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), но работа выполнена.