|
17.12.2010, 13:56 | #1 |
Участник
|
Заблокировать menuItemButton если запись не выбрана
Как проще всего заблокировать menuItemButton если запись в соответствующем DataSource не выбрана (DataSource пуст либо фильтром скрыты все записи)? Почему такое поведение не предусмотренно по умолчанию?
|
|
17.12.2010, 14:02 | #2 |
Ищущий знания...
|
я обычно в методах формы пишу метод, что то типа activeButton. В этом методе пишу что то типа:
X++: MymenuItemButton.Enabled(DataSource.RecId != 0); далее в методе active нужного dataSource вызываю этот метод.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
17.12.2010, 14:25 | #3 |
Участник
|
|
|
17.12.2010, 14:27 | #4 |
Участник
|
|
|
17.12.2010, 14:03 | #5 |
Участник
|
не предусмотренно по умолчанию т.к. в этом нет смысла. проверяйте наличие курсора непосредственно внутри вызываемого класса или формы
Последний раз редактировалось ice; 17.12.2010 в 14:28. |
|
17.12.2010, 15:13 | #6 |
Ищущий знания...
|
изначально, этот метод вызывается в init(). затем в active() главного дата сорса, к которому приджойнены остальные, и затем в active() остальных дата сорсов. и все. все нормально работает
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
17.12.2010, 15:25 | #7 |
Участник
|
А если удалить из грида единственную запись или наложить такой фильтр, условию которого не удовлетворит ни одна из записей и грид опустеет, тогда также вызовется activeButton?
|
|
17.12.2010, 15:38 | #8 |
Ищущий знания...
|
Цитата:
но тут уже подстраховывает проверка в самой функции
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
17.12.2010, 14:48 | #9 |
Участник
|
Решил в событии leave
Да и ещё по умолчанию в самом дизайнере, либо в ините формы, заблокировать кнопку, на случай если сразу после открыти формы datasource уже пуст. Исправление: не leaveRecord а просто leave(). При потери гридом фокуса ввода событие leave не происходит, в отличии от leaveRecord. Последний раз редактировалось S.Kuskov; 17.12.2010 в 15:08. |
|
17.12.2010, 15:01 | #10 |
Участник
|
и так на каждой форме, куда добавите кнопку?
|
|
17.12.2010, 15:17 | #11 |
Участник
|
|
|
17.12.2010, 15:31 | #12 |
Участник
|
можно было разместить кнопку в выпадающем меню, и блокировать кнопку при нажатии на кнопку меню. а проверку в вызываемом классе все равно придется делать, тк если его вызывут из кода, то он некорректно отработает
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
17.12.2010, 15:33 | #13 |
Ищущий знания...
|
Цитата:
Но тема не про это, а про отдельный menuItemButton. И иногда кнопки должны быть просто на форме, без всяких MenuButton.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: S.Kuskov (1). |
26.12.2010, 19:02 | #14 |
Участник
|
Проверки в коде - это хорошо, это правильно, без них не обойтись, это даже не обсуждается. Ещё раз процетирую себя
Цитата:
Вопрос, почему в системе этого не предусмотрено? Много ли смысла в передаче пустого курсор из формы (нормальной аксаптовской формы) в код? Т.е. создавая menuItemButton и связывая его с конкретным источником данных, разве мы не подразумеваем использование этой кнопки только в контексте какой-то (одной или нескольких в случае мультиселекта) записи? P.S.: Cам я несколько раз использовал возможность передачи пустого курсора в различных целях. Например, для получения ссылки на временую таблицу (в результате обработки в неё добавлялись записи), либо для доступа через полученный курсор к связанному с ним источнику данных (в этом случае вообще было не важно есть ли в курсоре данные или нет). Но не думаю что, использовать для этого args.record() оправдано, в таких случаях вполне можно обойтись и без него. И честно говоря в первый раз был удивлён когда данная комбинация сработала. Не было это... интуитивно понятным что ли. |
|
26.12.2010, 19:21 | #15 |
Administrator
|
Цитата:
Сообщение от S.Kuskov
Вопрос, почему в системе этого не предусмотрено? Много ли смысла в передаче пустого курсор из формы (нормальной аксаптовской формы) в код? Т.е. создавая menuItemButton и связывая его с конкретным источником данных, разве мы не подразумеваем использование этой кнопки только в контексте какой-то (одной или нескольких в случае мультиселекта) записи?
__________________
Возможно сделать все. Вопрос времени |
|
26.12.2010, 20:17 | #16 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Много ли смысла в передаче пустого курсор из формы (нормальной аксаптовской формы) в код? Т.е. создавая menuItemButton и связывая его с конкретным источником данных, разве мы не подразумеваем использование этой кнопки только в контексте какой-то (одной или нескольких в случае мультиселекта) записи?
|
|
17.12.2010, 15:40 | #17 |
Ищущий знания...
|
кстати, можно попробовать добавить на active() формы вызов этого метода. по идее active() формы должен вызываться всегда когда форма обновляется (не уверен, надо проверять), тогда вообще никаких проблем. и не надо в дата сорсах ничего писать
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
17.12.2010, 16:13 | #18 |
Участник
|
Проверил active() формы - работает только при активации окна, а не при любом его обновлении (оно и правильно). Здесь скорее нужно ловить манипуляции с источником данных, прекрыть и executeQuery() и delete(), но это не спортивно . Вот было бы прекрасно если бы такое поведение кнопки регулировалось каким-нибудь стандартным свойством. Мне кажется в этом будет смысл. На мой взгляд, текущее положение вещей создаёт какую-никакую но всё-таки потенциальная угрозу ошибки, вдруг в каком-нибудь месте системы нет соответствующей проверки в коде.
|
|
24.12.2010, 09:57 | #19 |
Участник
|
Есть метод, который вызывается всегда - display - можно этим воспользоваться
Создать контрол, к нему дисплейный метод, возращающий recid текущей записи, а также модифицирующий блокирование кнопки, плюс вывод label = false и размеры контрола = 0. "Лишний, технический" контрол практически не изменяет дизайн. ниже проект SharedProject_FormMenuItemButton.xpo |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
24.12.2010, 10:29 | #20 |
Модератор
|
Потому что проверка наличия буфера и его валидности традиционно выполняется в main или в конструкторе класса, вызываемого menuItemButton-ом
__________________
-ТСЯ или -ТЬСЯ ? |
|