Удаление фокуса со всех объектов в Visual Basic 6

Существует ли способ, с помощью которого пользователь может щелкнуть по самой форме и при этом удалить фокус с любого объекта (текстового поля, поля со списком и т. д.), который в настоящее время имеет его? В принципе, можно ли сразу убрать фокус со всего сразу?

Установка фокуса на саму форму не работает.

Я думал о том, чтобы сделать старый трюк «скрыть кнопку-заполнитель за другим объектом», но я действительно не фанат этого.

Спасибо!


person erekalper    schedule 22.02.2011    source источник


Ответы (4)


В VB6 PictureBox может получить фокус, даже если он не содержит никакого элемента управления.

В вашем случае вы можете поместить PictureBox с TabStop false, BorderStyle со значением 0, TabIndex со значением 0 за каждым другим элементом управления, но не содержащим какого-либо фокусируемого элемента управления, и растянуть его до ScaleWidth на ScaleHeight во время выполнения.

Вы также должны поместить метки и любой безоконный элемент управления на этот фон PictureBox.

Таким образом, когда пользователь нажимает «на форму», фокус «уходит». При «без фокуса» клавиша Tab будет фокусировать первый элемент управления (тот, у которого TabIndex установлен на 1).

person wqw    schedule 23.02.2011
comment
Интересная идея - мне она нравится, хотя ее реализация на данном этапе программы может раздражать (просто с точки зрения размещения внутри нее всех элементов управления и изменения размера). Я посмотрю. Суть, которую я получаю, заключается в том, что для этого нет простой команды, такой как RemoveFocusAll или что-то в этом роде, а просто умные обходные пути. - person erekalper; 23.02.2011
comment
В любом случае, мне пришлось сделать большой фоновый PictureBox по другой причине, и поэтому я решил, что могу просто убить двух зайцев одним гигантским пустым изображением. - person erekalper; 04.03.2011

Когда форма активна, что-то обычно ДОЛЖНО иметь фокус. Похоже, вы просто хотите не «показывать», что конкретный элемент управления имеет фокус.

Если это так, это будет зависеть от элементов управления. У некоторых есть свойства, которые управляют тем, указывает ли конкретный элемент управления каким-либо образом на его фокус.

Но встроенные элементы управления Windows всегда будут показывать свое состояние фокуса, если вы не подклассифицируете их.

Учитывая эту проблему. Я бы, вероятно, поместил кнопку на форму, а затем переместил ее за пределы экрана, когда форма загружается. Убедитесь, что это не табуляция, но затем, когда вы хотите скрыть фокус, установите фокус конкретно на кнопку, убедитесь, что кнопка ЕЩЕ находится в порядке табуляции, даже если это не табуляция, чтобы пользователь мог нажимать табуляцию во время на кнопку и в конечном итоге куда-то логично.

person DarinH    schedule 22.02.2011
comment
Да, как я уже сказал, я надеялся избежать скрытой кнопки, но я действительно не вижу другого способа сделать это. Однако вы правы, я знаю, что чему-то нужен фокус, я просто не хочу, чтобы он обязательно показывал фокус. Спасибо за совет! - person erekalper; 23.02.2011

У вас нет под рукой VB, но не могли бы вы просто удалить TabStop?

for x = 1 to me.Controls.count
    me.Controls(x).TabStop = 0
next
person AngryHacker    schedule 22.02.2011
comment
Ага. Как drventure сказал выше, я собираюсь поиграть с TabStop и (возможно) скрытой кнопкой/коробкой. Я не вижу другого способа сделать это. - person erekalper; 23.02.2011

У меня есть picturebox и элемент управления в форме.

Private Sub cmdButton_Click
   PictureBox.setFocus
   Exit sub
End sub

Внешний вид элемента управления не меняется, равно как и picturebox.

Конечно, вам нужно будет добавить предложение If-Then, если вы хотите, чтобы элемент управления иногда реагировал нормально.

person Peter N    schedule 15.11.2020