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