|
24.09.2014, 13:12 | #1 |
Участник
|
Как узнать контрол вызвавший дисплейный метод?
Ну собственно вопрос в теме)
Создал дисплей метод на датасорсе формы. Создал несколько полей на форме у которых datamethod - мой метод. Диспей метод прекрасно для всех срабатывает, но я хочу менять возвращаемое значение в зависимости от контрола. Вот как бы узнать какой контрол сработал? ps. Делать разные дисплей методы не хочу. В итоге хочу динамические контролы) |
|
24.09.2014, 13:22 | #2 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: skuull (1). |
24.09.2014, 13:32 | #3 |
Участник
|
|
|
24.09.2014, 13:38 | #4 |
Боец
|
|
|
24.09.2014, 13:59 | #5 |
Участник
|
Ну получается тогда я не ерунду спросил) Про ерунду я и сам все знаю)
А вообще хотелось красиво и компактно заменить блок в форме выводящий наименование всех фин. аналитик. И заодно заложиться теоретически на изменение возможно их количества. Есть примеры накоряченные решения такой задачи. Но много текста или не универсально. Вот если бы у меня controlCallingMethod() сработал все бы вышло изящно. Два метода по пять строк) |
|
24.09.2014, 18:32 | #7 |
Участник
|
|
|
24.09.2014, 15:21 | #8 |
Banned
|
Цитата:
Сообщение от Perc
Ну получается тогда я не ерунду спросил) Про ерунду я и сам все знаю)
А вообще хотелось красиво и компактно заменить блок в форме выводящий наименование всех фин. аналитик. И заодно заложиться теоретически на изменение возможно их количества. Есть примеры накоряченные решения такой задачи. Но много текста или не универсально. Вот если бы у меня controlCallingMethod() сработал все бы вышло изящно. Два метода по пять строк) Зачем? Даже если чисто для себя. Какое обоснование для данной модификации? Будет ли это использоваться на живом приложении или это просто развлечение? Что именно мешает использовать свой дисплейный метод для каждого контрола? Не мое дело конечно, но просто в тему о "красоте" в "Прощай X++" |
|
24.09.2014, 15:29 | #9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: ax_mct (1). |
24.09.2014, 18:46 | #10 |
Участник
|
Цитата:
Цитата:
Шут с ним с дисплейным методом, предложите другой способ. У меня была реализация (писанная не мной), там метод актив на датасорсе дополнялся вытаскиванием наименований. Но мне он не понравился тем, что 10 запросов к справочнику аналитик шло даже если наименования на другом табе и его не смотрят. |
|
24.09.2014, 13:39 | #11 |
Участник
|
Ловите стек вызовов
__________________
Айрат Вильданов. skype: vildanov.a |
|
24.09.2014, 15:28 | #12 |
Участник
|
Легко - использовать для каждого контрола свой DataSource. А в display методе проверять какой DataSource его вызвал.
|
|
24.09.2014, 18:51 | #13 |
Участник
|
|
|
24.09.2014, 15:39 | #14 |
Участник
|
Кстати есть и альтернативное решение - display метод возвращает все значения как массив, а каждый контрол показывает соответствующий ему элемент массива.
|
|
24.09.2014, 17:26 | #15 |
Banned
|
Цитата:
Даже если в данной сборке и прокатит то в любом случае уменьшает надежность системы. А она и так бедная кашляет и сопливиться. Ей такие сюрпризы не нужны P.S. По идее система должна ругнуться на сложный тип в display методе. Но даже если у нее рот заткнут зачем ее насиловать? злодеи и колдуны. на костер Последний раз редактировалось ax_mct; 24.09.2014 в 17:31. |
|
24.09.2014, 18:56 | #16 |
Участник
|
|
|
24.09.2014, 18:15 | #17 |
Banned
|
В принципе, можно проверять имя контрола и делать Switch по имени.
Возвращать естественно примитивный тип на базе string. То есть можно сделать один дисплейный метод. Но это неправильно и неоправданно и недальновидно. Еще немного и индусы с копи-пастом покажутся меньшим злом Это НЕКРАСИВО на уровне дизайна. Для программиста (текущего или следующего) это только усложнение работы но не полезность. Попросту - извращение |
|
24.09.2014, 19:04 | #18 |
Участник
|
Цитата:
Сообщение от ax_mct
В принципе, можно проверять имя контрола и делать Switch по имени.
Возвращать естественно примитивный тип на базе string. То есть можно сделать один дисплейный метод. Но это неправильно и неоправданно и недальновидно. Еще немного и индусы с копи-пастом покажутся меньшим злом Это НЕКРАСИВО на уровне дизайна. Для программиста (текущего или следующего) это только усложнение работы но не полезность. Попросту - извращение |
|
24.09.2014, 21:35 | #19 |
Участник
|
|
|
24.09.2014, 22:29 | #20 |
Banned
|
Только сейчас въехал в то что хочет автор. Так как при корректном добавлении финансовой аналитики, она прекрасно автоматически распадается на элементы массива на формах.
А вот когда значение аналитики "111" а пользователь хочет человеческое наименование справа то да, это задача частая и популярная. Всегда ее решал на автомате и без проблем. Дополнительный контрол справа с дисплейным методом. В принципе эти "Value's name" контролы можно добавлять автоматически при каждом запуске формы. Реализуемо, но я такое делать никогда не буду в силу бизнес-модели работы и нелепости самой задумки. Интересно как часто добавляются финансовые аналитики Если часто то да можно сделать кнопку на форму - "Обновить контролы". Но это явно не так. Если же как учебно-абстрактная задача то действительно достаточно азартно. Но я бы просто уточнил что хочет пользователь и изменил дизайн решения начиная с cамого начала. Например tooltips, mouseOver, hotkeys или просто показ комбинированного имени "ID (NAME)" вместо ID аналитики (в этом случае надо думать о длине или о новом EDT на форме что тоже неэлегантно). Пойнт в том что если требуется сложное решение то значит надо менять дизайн. Сложность решения на уровне кодирования это признак плохого дизайна или плохой идеи. Самое простое это тупо ручками добавлять контрол для "Value's name". Не так часто это и случится. Но безусловно задача интересная, не могу этого не признать - просто я такие себе позволить просто не могу В порядке бреда. Вариант 1 EDT akaDimensionName. Добавить массив контролов "Value's name" на форму. Связь между контролами через одинаковый индекс в массивах. Вариант 2 Показ грида [ID, NAME] с таблицей финансовой аналитики и фильтром по данному значению. Вариант/Мысль? 3 Исходить из того у нас коллекция контролов в группе на форме и мы может их перебрать и что надо добавить. Declaimer: это все несерьезно однако. Последний раз редактировалось ax_mct; 24.09.2014 в 23:10. |
|