|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Доброго дня, коллеги! Можно ли перехватить передачу фокуса из области выделения? Ситуация такова: кликаем по области выделения, фокус остается там (в обл.выд.) и не передается контролам. НО в обработке события формы KeyDown прописано применение метода me.requery при определенных условиях. Так вот, после requery фокус падает-таки на контрол с индексом 0. Как бы вот этого не допустить? Или вернуть в область выделения... ___________________________________________________________________ "Нихера у вас запросы!!!" - сказала база данных и повисла. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 09:13 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar Доброго дня, коллеги! Можно ли перехватить передачу фокуса из области выделения? Ситуация такова: кликаем по области выделения, фокус остается там (в обл.выд.) и не передается контролам. НО в обработке события формы KeyDown прописано применение метода me.requery при определенных условиях. Так вот, после requery фокус падает-таки на контрол с индексом 0. Как бы вот этого не допустить? Или вернуть в область выделения... ___________________________________________________________________ "Нихера у вас запросы!!!" - сказала база данных и повисла. перед обновлением запомнить в переменной ID текущей записи после обновления встать на запись с ID которую запомнили. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 09:49 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
ROI перед обновлением запомнить в переменной ID текущей записи после обновления встать на запись с ID которую запомнили. там речь про контролы, а не про записи... Beliar Так вот, после requery фокус падает-таки на контрол с индексом 0 Обычно реквери делается после завершения ввода записи, для обновления содержимого формы, и обычно после этого фокус ставят на один из контролов, с которых начинается новый ввод данных Me.ИмяКонтрола.SetFocus Но если таки нужно вернуться на определенный контрол, то как уже выше было сказано - запоминайте его индекс в переменной... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 10:44 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar, вместо requery попробуйте refresh. иногда помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 11:18 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Всё не так: тычка мышой в область выделения ленточной формы -> фокус остается в области выделения (если вообще без вмешательства в какие-либо события). Мне бы его там и оставить. Но у меня (как раз-таки из-за вмешательства в событие KeyDowm формы) при этой тычке срабатывает requery, из-за которого фокус передается первому контролу (с индексом по таб 0). А нужно, чтоб не передавался. ROI после обновления встать на запись с ID которую запомнили. Это как раз у меня и прописано сразу после реквери. На запись переходит, а фокус все-равно соскакивает на первый контрол. Хотя опять же, в других случаях (без реквери) после этих манипуляций фокус остается в области выделения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 11:27 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
alecko Beliar, вместо requery попробуйте refresh. иногда помогает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2021, 11:32 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar, попробуйте выделение записи через RunCommand ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 12:59 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar ... Но рефреш оставляет на экране удаленные записи (перед requery (или refresh) прописано... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 14:27 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
sdku Beliar ... Но рефреш оставляет на экране удаленные записи (перед requery (или refresh) прописано... А при чем тут удаляемая запись? она исчезает с экрана. Для вертежа с FindNext считывается id из события GotFucus полей, либо KeyDown и Click формы. Т.е. попадаем на ту запись, куда "ткнул" юзер. Тут вся проблема: если refresh не применялся, то при клике по области выделения, фокус остается там (см. scr1.jpg), а если форму рефрешнули, то фокус сваливается на контрол с индексом по Tab = 0 (см. scr2.jpg). Джипеги в приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 14:50 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
второй скриншот ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 14:50 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Дык текущая запись осталась прежней. Она не знает какое поле вам надобно. ну перенесите фокус туда куда вам нужно. Вы тыкаете на в область выделения записи. и получаете эту же запись после обновления. В чем проблема то? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 15:07 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar, Может я чё не понимаю:но ответьте конкретно и кратко Как-то так: после обновления формы(или все-таки удаления записи) фокус должен оказаться в таком-то поле такой-то(первой,последней,предыдущей,следующей-по умолчанию так и происходит,конкретной) записи\выделить запись ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 15:16 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Субформа ленточного типа содержит 1 комбобокс с тремя столбцами (назовем его cmbx1) с ограниченным списком, два текст-бокса для заполнения (txt1 и txt2) и два задизэбленных текст-бокса (txt3 и txt4). Необходимо чтобы: 1) пользователь не оставлял записи с пустым комбобоксом (такая запись удаляется, если юзер уходит с записи). 2) после выбора значения в комбобоксе, заполнялись поля txt3 и txt4 из доп.столбцов комбобокса Реализовано посредством обработки событий - BeforeUpdate комбобокса (заполнение полей); - GotFocus комбо- и текстбоксов (удаление косячных записей); - Click, DoubleClick, KeyDown субформы (удаление косячных записей); - Exit элемента управления с этой субформой в модуле материнской формы (удаление косячных записей). Как именно. Юзер тнкул мышкой в субформе, не важно куда -> фиксируем (записываем в переменные) - id той записи, куда ткнул юзер - значение me.NewRecord - значение me.ActiveControl (т.е. куда ткнул юзер) Это все в событиях GotFocus контролов и в событиях Click, DoubleClick, KeyDown субформы. После этого там же в тех же событиях перебегаем в самопальную процедуру (назовем ее DellNull). Тут-то самая тусня. Разветвленный под разные ситуации код. Используется флаг для срабатывания проверки наличия "косячных записей", если они есть, то их удаление (запросом на удаление методом execute), затем рефреш формы/возвращения к записи, в которую ткнул юзер (т.к. рефреш отправляет в начало рекордсета)/возвращения фокуса контролу, куда ткнул юзер (по той же причине). Если ткнули в задизбеленный контрол или в область выделения, возвращения к записи после рефреша нужно, а вот фокус никакому контролу не передается, остается в области выделения. Если ткнули в новую запись, она удалится рефрешем, а после рефреша - me.AddNew и в тот же контрол. Если ткнули вообще "в молоко", то только удаление и рефреш. Перед самым обновлением формы флаг принимает отменяющее значение. Короче, все работает как надо, кроме одного момента: авторЕсли ткнули в задизбеленный контрол или в область выделения, возвращения к записи после рефреша нужно, а вот фокус никакому контролу не передается, остается в области выделения. Вот это после рефреша не работает. Фокус таки передается первому по списку Tab контролу. Без рефреша не передается, а вот после него да. Конечно, я уже сделал всё, чтобы это не играло никакой роли, и пошел дальше. Но хотелось бы все-таки решить эту проблему, чтобы в будущем не поднимать обсуждение снова, если прижмёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 20:58 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar, Уточните: -что является источником формы? -почему нельзя запретить изменять сохраненные записи(иначе лишаетесь истории) -критерии определения "косячных записей" ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 21:12 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar, как всё сложно... - Сделай наверху формы свои: комбобокс и два txt1 и txt2 + кнопка Добавить запись txt3 и txt4 не нужны, они все равно берутся из комбобокс - если юзер набрал все правильно в комбобокс и txt1 и txt2, то по кнопке он может добавить запись... - Все записи отображаются в списке, который занимает большую часть формы - После кнопки Добавить, тупо обновляем Список и выделяем первую запись ибо она добавлена последней, так как сортировка в списке по убыванию ID. - Если нужно удалить запись, то добавляем кнопку Удалить и по ней удаляем строку выделенную в списке (при выделении строки значение списка равно ID удаляемой записи) - Если нужно изменить запись, добавляем кнопку Изменить, при выделении строки в списке записываем значения столбцов списка в в комбобокс и txt1 и txt2, меняем их на нужные, жмем кнопку изменить... В трех кнопках запускаются три запроса (добавление, изменение, удаление), больше никакого кода и пофиг куда там ткнул мышкой юзер, чихнул он или перднул, всё будет ОК Requery - только на список делаем ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2021, 21:18 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
sdku Beliar, Уточните: -что является источником формы? -почему нельзя запретить изменять сохраненные записи(иначе лишаетесь истории) -критерии определения "косячных записей" vmag Beliar, как всё сложно... - Сделай наверху формы свои: комбобокс и два txt1 и txt2 + кнопка Добавить запись txt3 и txt4 не нужны, они все равно берутся из комбобокс - если юзер набрал все правильно в комбобокс и txt1 и txt2, то по кнопке он может добавить запись... - Все записи отображаются в списке, который занимает большую часть формы - После кнопки Добавить, тупо обновляем Список и выделяем первую запись ибо она добавлена последней, так как сортировка в списке по убыванию ID. - Если нужно удалить запись, то добавляем кнопку Удалить и по ней удаляем строку выделенную в списке (при выделении строки значение списка равно ID удаляемой записи) - Если нужно изменить запись, добавляем кнопку Изменить, при выделении строки в списке записываем значения столбцов списка в в комбобокс и txt1 и txt2, меняем их на нужные, жмем кнопку изменить... В трех кнопках запускаются три запроса (добавление, изменение, удаление), больше никакого кода и пофиг куда там ткнул мышкой юзер, чихнул он или перднул, всё будет ОК Requery - только на список делаем Ну вариант, конечно, пусть и совсем уж альтернативный. Рефреш формы в этом случае будет не нужен. Но все это слишком усложнит работу пользователя, и будет сильно тормозить его. Он, как оператор, должен быстро вносить записи, а тут я ему еще и кнопок напихаю. Сортировка на глазах юзера тоже вещь зловредная, он же с бумажного носителя вносит, должен видеть на экране тоже, что и на бумаге. txt3 и txt4 должны быть видны на экране. Нужно оставить возможность выделять несколько записей в области выделения, для удаления. В целом, я довел интерфейс этой формы до нужного и удобного вида, учел все потребности, обыграл все ситуации. Кроме одной вот этой загвоздки. Пока шел на работу, подумал, что дело не в самом рефреше, а в том, что он вызывает собитие подформы, при котором фокус передается "первому" контролу. Любую форму когда загружаем, получаем фокус в первый по списку контрол. Попробую сейчас выяснить, где это происходит. Load, Current... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 06:25 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
vmag, я все же сделаю по Вашему предложению тоже. Весьма интересный способ. Пусть не приживется сейчас к этому случаю. В другом месте пригодится) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 06:58 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar ..."Косячные записи" это те, где значение комбобокса = -1. Такое значение combo может означать только одно-код в тбл.со стороны 1 не счетчик (а что и какие значения может принимать combo-почему в его источнике строк не наложить фильтр:значение<>-1 и "косячных" значений просто не будет в списке) Всё-таки ответьте что является источником формы да и combo тоже (что является ключом в таблице используемой для создания источника строк combo) Смутно подозреваю что надо анализировать логику работы и схему БД ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 12:55 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 13:01 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
sdku Beliar ..."Косячные записи" это те, где значение комбобокса = -1. Такое значение combo может означать только одно-код в тбл.со стороны 1 не счетчик (а что и какие значения может принимать combo-почему в его источнике строк не наложить фильтр:значение<>-1 и "косячных" значений просто не будет в списке) sdku Всё-таки ответьте что является источником формы да и combo тоже (что является ключом в таблице используемой для создания источника строк combo) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 14:29 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar .... Но я всё же не пойму, зачем копаться в схеме БД. Beliar ..."Косячные записи" это те, где значение комбобокса = -1. Что у Вас является ключом в таблице-справочнике для combo?А самое лучшее просто выложите БД(фрагмент) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2021, 15:44 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
sdku Beliar .... Но я всё же не пойму, зачем копаться в схеме БД. Beliar ..."Косячные записи" это те, где значение комбобокса = -1. Что у Вас является ключом в таблице-справочнике для combo?А самое лучшее просто выложите БД(фрагмент) Да нет там ключевого поля. Простая выборка, типа [наименование][тип][ед.измерения]. С ключом появляется проблема с подбором значений по первым буквам. Вообщем, это лишнее тут. А пустое значение может появиться, если "ткнуть" на новую запись, сразу проставляется значение в поле связи и значения по умолчанию двух других полей (с числовым типом данных). А еще юзер может и изменить значение какого-нибудь поля, при этом не трогая комбобокс. Ну это можно решить, включив опцию обязательное поле. Можно не обсуждать даже, хотя помню, как это вызывало весьма неадекватную реакцию пользователя, когда он не мог уйти с записи, не мог понять, что от него требуется, давай акс вырубать, кнопку "ресет" жать... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 06:35 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar С ключом появляется проблема с подбором значений по первым буквам. Может потому что ширина первого поля не 0? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 09:01 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
cylindr Beliar С ключом появляется проблема с подбором значений по первым буквам. Может потому что ширина первого поля не 0? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 09:57 |
|
не передавать фокус из области выделения
|
|||
---|---|---|---|
#18+
Beliar Да нет там ключевого поля. Простая выборка, типа [наименование][тип][ед.измерения]. С ключом появляется проблема с подбором значений по первым буквам. Вообщем, это лишнее тут.... Если источник формы таблица то на кой обновлять форму при каждом "чихе" (обрабатывать KeyDown формы).Чем Вас не устраивает стандартное поведение формы (или мы чего-то не знаем-например о наличии вычисляемых полей в таблице) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2021, 13:59 |
|
|
start [/forum/topic.php?fid=45&msg=40087352&tid=1609630]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
121ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 481ms |
0 / 0 |