powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Баг или фича? О фокусе группы переключателей...
23 сообщений из 23, страница 1 из 1
Баг или фича? О фокусе группы переключателей...
    #39599494
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разбираю старую программу, доставшуюся в наследство. Есть в ней такое место.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub КодСостОбъект_Exit(Cancel As Integer)
If Nz(Me.КодСостОбъект, 0) < 1 Then
      MsgBox ("Состояние объекта должно быть заполнено!")
      Me.КодСостОбъект.SetFocus
      Exit Sub
End If
End Sub

КодСостОбъект - это группа переключателей. Пользователь должен ввести код состояния объекта. Иначе выдаётся сообщение и всё возвращается обратно. Но у группы переключателей нет событий GetFocus и LostFocus. Значит у него не и свойства SetFocus? Так или нет? Но программа не выдаёт ошибок, а фокус передаётся на первый контрол на форме (для списка переходов по Таб)
Зато каждый переключатель может иметь фокус. Пробую передать фокус первому переключателю в группе. Не срабатывает. Фокус всё равно переходит на первый контрол на форме. А мне надо, чтобы он никуда не переходил. Как быть?
Дело в том, что на событие получение фокуса я повесил подсветку поля. И получается не совсем хорошо.


-------------------------------------------------------------
А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса?
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599504
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss...у группы переключателей нет событий GetFocus и LostFocus. Значит у него не и свойства SetFocus? Так или нет?А посмотреть?
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599513
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно получается. Метод есть, а событий нет. Как так?
А Вы задайте его. И посмотрите, что получается. У меня фокус перескакивает на первый контрол на форме. А у Вас?
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599514
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss,

Проблема здесь не группа переключателей, а старые грабли с потерей / получением фокуса...
В этом смысле ГП не отличается от обычного поля на которое нужно вернуть фокус обратно в случае его неправильного заполнения...
Лечится это программно - сначала переводим фокус на любой другой элемент формы, а затем возвращаем обратно...
Я тут набросал пример, если вы выбираете в группе значения 1-3 , то после Enter выходит сообщение и фокус остается на месте... Если 4 и 5 то все нормально и фокус переходит на поле...
В коде помечена строка с лечением ситуации...
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599516
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossА Вы задайте его. И посмотрите, что получается. У меня фокус перескакивает на первый контрол на форме.А Вы создайте группу БЕЗ ПЕРЕКЛЮЧАТЕЛЕЙ и попробуйте то же самое... но сперва подумайте - что получится, кому достанется фокус, и, главное, почему...
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599517
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jossнет событий GetFocus и LostFocus
Как это нет? Есть OnEnter, OnExit, код на Exit и повешен
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599525
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
Private Sub grp1_Exit(Cancel As Integer)
    Cancel = IsNull(Me.grp1)
End Sub


Не?
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599563
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за советы. Постарался проверить все.
vmag
Ваш пример работает. Но вот в моей форме этот способ не функционирует. Любой SetFocus сначала переходит на первый элемент на форме, а уже потом на тот, что указан в команде. Пробовал и декомпилировать и компилировать заново. Ничего не меняется. наверно какой-то глюк.
Akina
Ну не знаю. Соображалка не работает. Не сейчас. Надо посидеть в спокойной обстановке.
MrShin
Но ведь формально у группы нет событий SetFocus и LostFocus
Predeclared
На мой взгляд оптимальное предложение. Сделал вот так
Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub КодСостОбъект_Exit(Cancel As Integer)
    If Nz(Me.КодСостОбъект, 0) = 0 Then
        MsgBox ("Состояние объекта должно быть заполнено!")
        Cancel = True
    End If
End Sub

всё заработало на УРА! Оставил в рабочей версии. А с остальными буду копаться.
Всем спасибо.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599580
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jossформально у группы нет событий SetFocus и LostFocus
Да, формально нет, т.к. реально фокус получает один из контролов группы, а метод SetFocus передает фокус также контролу в группе. Но для наших целей Exit вполне подходит.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599587
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossВаш пример работает. Но вот в моей форме этот способ не функционирует. Любой SetFocus сначала переходит на первый элемент на форме, а уже потом на тот, что указан в команде. Пробовал и декомпилировать и компилировать заново. Ничего не меняется. наверно какой-то глюк.

Самое прикольное, что если в моем примере заменить две строки с SetFocus на Cancel = True то тоже все великолепно работает...
Отсюда можно сделать вывод, что Cancel = True это кардинальное решение, - типа "харэ" или "стапэ" от слова "ваще..."
А мой пример в вашем случае скорее всего сводится на нет действиями из других событий, следующих за Exit этого или других элементов управления...
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599602
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrShinJossформально у группы нет событий SetFocus и LostFocus
Да, формально нет, т.к. реально фокус получает один из контролов группы, а метод SetFocus передает фокус также контролу в группе. Но для наших целей Exit вполне подходит. Могу даже уточнить. Фокус получает включенный переключатель. Если такого нет, то фокус получает самый верхний переключатель. Если же таких несколько (выстроены в ряд), то самый левый из ряда.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599610
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagСамое прикольное, что если в моем примере заменить две строки с SetFocus на Cancel = True то тоже все великолепно работает...
Отсюда можно сделать вывод, что Cancel = True это кардинальное решение, - типа "харэ" или "стапэ" от слова "ваще..."
А мой пример в вашем случае скорее всего сводится на нет действиями из других событий, следующих за Exit этого или других элементов управления... У Евгения Серебрякова не его "Кирпичиках кода" есть пример Подсветка активного поля в форме Вот я его и пытаюсь встроить в программу. Считайте, что встроил. Мелочь, а удобно.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599617
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossМогу даже уточнить. Фокус получает включенный переключатель.
Если такого нет, то фокус получает самый верхний переключатель.
Если же таких несколько (выстроены в ряд), то самый левый из ряда.Не совсем так.
Если нет выбранного переключателя, то фокус получает тот переключатель,
который был добавлен в группу раньше остальных.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599643
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossУ Евгения Серебрякова не его "Кирпичиках кода" есть пример Подсветка активного поля в форме Вот я его и пытаюсь встроить в программу. Считайте, что встроил. Мелочь, а удобно.

Еще раз убедился, что наличие кода предполагает как минимум наличие глюков...
В лоб "кирпичик" не пошел, пришлось переделать Optional mrk As Boolean = False на явно...
По мне так лучше без кода от слова совсем, если есть такая возможность...
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599651
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleНе совсем так.
Если нет выбранного переключателя, то фокус получает тот переключатель,
который был добавлен в группу раньше остальных. Проходили. Возьми последний переключатель и подыми его выше всех. Да, он будет получать фокус последним в группе. Затем закрой базу (с сохранением изменений - ес-но) Открой заново. И... Опа-на! Этот переключатель получает фокус первым! Я уже об этом писал где-то полгода назад.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599653
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagЕще раз убедился, что наличие кода предполагает как минимум наличие глюков...
В лоб "кирпичик" не пошел, пришлось переделать Optional mrk As Boolean = False на явно...
По мне так лучше без кода от слова совсем, если есть такая возможность... Я то-же об этом подумывал. Но дело в том, что у меня есть 3 типа полей.
1 - недоступные (серые)
2 - доступные, но не в фокусе (белые)
3 - доступное в фокусе (желтое)

Но если полей всего 2 типа, то Ваше предложение - то, что надо
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599676
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss__MichelleНе совсем так.
Если нет выбранного переключателя, то фокус получает тот переключатель,
который был добавлен в группу раньше остальных. Проходили. Возьми последний переключатель и подыми его выше всех. Да, он будет получать фокус последним в группе. Затем закрой базу (с сохранением изменений - ес-но) Открой заново. И... Опа-на! Этот переключатель получает фокус первым! Я уже об этом писал где-то полгода назад.
Ну, что ж...
Закрыла. Открыла. Все по инструкции.)))
При переходе по контролам формы - фокус в группе получает "родившийся первым", хоть и стоит самым правым.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599685
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleНу, что ж...
Закрыла. Открыла. Все по инструкции.)))
При переходе по контролам формы - фокус в группе получает "родившийся первым", хоть и стоит самым правым.

Я тоже проверил (в том своем примере, который db3), передвинул 5-ю кнопку наверх перед первой, сохранил и вышло все как говорил товарищ Joss - стала рулить 5-я кнопка вместо 1-й... У меня расположение группы вертикальное... похоже случай неустойчивый, но имеет место быть...
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599692
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поведение моих переключателей сохраняется даже после сжатия.
Фокус получает правый переключатель.

Уточняю: мы ведь говорим о случае, когда группе переключателей не присвоено значение.
И значения по умолчанию нет.
То есть, все переключатели "погашены".
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599693
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleНу, что ж...
Закрыла. Открыла. Все по инструкции.)))
При переходе по контролам формы - фокус в группе получает "родившийся первым", хоть и стоит самым правым. А расстояние от верхнего края у них какие? Надо бы хотя бы на сотку отличаться. Если высоты одинаковые или очень близкие, то здесь как раз рулит порядок вставки на форму.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599695
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleПоведение моих переключателей сохраняется даже после сжатия.
Фокус получает правый переключатель.

Уточняю: мы ведь говорим о случае, когда группе переключателей не присвоено значение.
И значения по умолчанию нет.
То есть, все переключатели "погашены". Выложите Ваш примерчик, посмотрю. Очень интересно.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599697
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss,

Ага...

Переместила правый переключатель ниже, теперь фокус получает не он.
Поставила его выше всех - опять фокус к нему приходит.

Значит, берется "верхний", а если все на одном уровне по горизонтали, то "первый".
Занятно.

Если надобность в примере не отпала, то вечером.
Сейчас нужно в Москву съездить.
...
Рейтинг: 0 / 0
Баг или фича? О фокусе группы переключателей...
    #39599712
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleJoss,

Ага...

Переместила правый переключатель ниже, теперь фокус получает не он.
Поставила его выше всех - опять фокус к нему приходит.

Значит, берется "верхний", а если все на одном уровне по горизонтали, то "первый".
Занятно.

Если надобность в примере не отпала, то вечером.
Сейчас нужно в Москву съездить. Как я и писал. Сначала берётся самый верхний, затем тот что пониже. Значит я ошибся на счёт правого при одинаковом уровне. Возможно... Пример не нужен. То, что порядок получения фокуса переключателем не зависит от порядка его появления на форме, а только от его местоположения, Вы убедились.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Баг или фича? О фокусе группы переключателей...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]