Контрол для ввода величин с размерностями
От: Сергей Выдров  
Дата: 05.01.06 14:38
Оценка:
Как с ними быть?

Одна и та же величина может иметь разные размерности. Скажем, расстояние — в метрах или километрах. Как должен выглядеть элемент управления для ввода таких величин?

Классика — рядом поместить Edit box и Combo box. Но они имеют разную высоту, за что очень спасибо мелкософту. Да и пользоваться таким решением не очень удобно, с т.з. реализации — такой сборный компонент нельзя использовать как одно окно. А варианты с невидимыми панелями отпадают по причине того, что компоненты-подложки, на которых предполагается использовать эту панель, как правило, имеют стиль clip children. Мне кроме masked edit более ничего в голову не приходит. Еще я смотрел варианты с PropertyGrid (значение-размерность-значение-размерность, сверху вниз) и еще раз убедился, что это мертворожденный компонент, который в нормальном GUI следует использовать очень осторожно.
Re: Контрол для ввода величин с размерностями
От: grigsoft Беларусь http://www.grigsoft.ru/
Дата: 05.01.06 19:09
Оценка:
По-моему, тут все сильно зависит от конкретного случая и контекста. Скажем, в случае с километрами вполне можно разрешить прямо в edit писать 100м или 1.8км и разбирать это, а размерноость по умолчанию указать рядом статиком (м). Чтобы сделать возможности учевидными, просто автоматически приводить 2000 к 2км. В случае нескольких значений с общей единицей, обычно используют радио-кнопки (если вариантов немного, типа cm\inch). Иногда, полагаю, можно и просто чекбоксом обойтись — когда есть общепринятая единица, и есть возможность использовать альтернативу.
По-поводу использования, кстати — мне как-то приходилось в молодости делать нечто похожее, там был комплект из 3 контролов. На форме ставился только edit, а свой DDX_Control (VC++\MFC) создавал дополнительно кнопку и чекбокс, подбирая свободный ID на диалоге, позиционировал их и обеспечивая прозрачный обмен. Уверен, на каком-нибудь Delphi это еще проще было бы. Так что все от реализации зависит.
Re: Контрол для ввода величин с размерностями
От: rlabs Россия  
Дата: 05.01.06 20:22
Оценка: +1 -1
Здравствуйте, Сергей Выдров, Вы писали:

СВ>Одна и та же величина может иметь разные размерности. Скажем, расстояние — в метрах или километрах. Как должен выглядеть элемент управления для ввода таких величин?


Ну например:
а) если разноразмерные величины не могут существовать одновременно (в одном сеансе), вынести единицу измерения в настройки; как это делают, например, различные "чертежные" и проектировочные приложения
б) разобрать строчку вида 15m45cm3mm не так уж сложно, в принципе (но всед за этим в требованиях может появиться "калькулятор в поле", а кому это надо?
в) если параметров не очень много, и размерностей тоже — можно скомбинировать radiobutton+edit и переключать их
г) можно сделать выпадающую кнопку-toolbutton с величинами — с размерами там проще, чем у комбобокса, и можно даже собрать в кастомный контрол вида комбо-бокса. Только с клавиатуры будет не очень доступно, да и с интернационализацией проблемы
д) можно тупо — maskedit, а единицу из контекстного меню выбирать. Минус — пользователь-новичок низачто не врубится, как сменить единицы измерения.

А гридами действительно не стоит увлекаться, неудобные они, да и некрасивые.
Alex Nikulin
Yota Lab
Re[2]: Контрол для ввода величин с размерностями
От: SEDEGOFF Россия www.srcsoft.com
Дата: 06.01.06 03:06
Оценка:
R>А гридами действительно не стоит увлекаться, неудобные они, да и некрасивые.
Вот потому и не согласен.

Собственно по вопросу.
Есть Edit с Button при нажатии на Button (или Alt+Down) открывается окно редагтирования с тем же гридом, везде стоят нули и фокус на ячейке с размерностью по умолчанию. Пользователь вводит число и нажимает ОК (Ctrl+Enter). Все. Нажимая стрелки вверх или вниз — перемещается по строкам гриду. Если пользователь начинает нажимать буквы — начинается поиск соответствующей размерности.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Контрол для ввода величин с размерностями
От: Сергей Выдров  
Дата: 06.01.06 06:33
Оценка:
Здравствуйте, SEDEGOFF, Вы писали:

R>>А гридами действительно не стоит увлекаться, неудобные они, да и некрасивые.

SED>Вот потому и не согласен.

Я когда-то был фаном этих прапертных гридов, причем как пользователь, а не программист. Очень меня напрягало, что в Delphi такая штука есть, а в VC 6.0, которой я тогда пользовался — нет. Теперь я хладнокровно считаю, что надо быть настоящим гиком от программирования, чтобы любить эти штуки. Обычного пользователя очень обламывает заполнять сетки.

SED>Собственно по вопросу.

SED>Есть Edit с Button при нажатии на Button (или Alt+Down) открывается окно редагтирования с тем же гридом, везде стоят нули и фокус на ячейке с размерностью по умолчанию. Пользователь вводит число и нажимает ОК (Ctrl+Enter). Все. Нажимая стрелки вверх или вниз — перемещается по строкам гриду. Если пользователь начинает нажимать буквы — начинается поиск соответствующей размерности.

Че-та ета... запутано как-то. Простота — залог здоровья. Решение "Edit + combo" явно лучше будет, на мой чайниковский взгляд. Напрягает меньше. Но жрет много места, зараза, и выглядит некрасиво.
Re[4]: Контрол для ввода величин с размерностями
От: SEDEGOFF Россия www.srcsoft.com
Дата: 06.01.06 07:01
Оценка: +2
СВ>... прапертных гридов...
Неее, ну их нафиг. Все строю всегда на виртуальных датасетах и обычных гридах.


СВ>Че-та ета... запутано как-то. Простота — залог здоровья. Решение "Edit + combo" явно лучше будет, на мой чайниковский взгляд. Напрягает меньше. Но жрет много места, зараза, и выглядит некрасиво.

Сколько людей — столько и мнений. Мое мнение такое. Мышь — это зло. Ввод одного значения должен быть организован в одном контроле. По тому опыту, который есть сейчас — редактирование сложного значения необходимо производить в оддельном окне. При этом не следует забывать — combo — штука со своими тараканами — не убрал во время фокус — крутанул колесико — пол отдела премии лишились . На самом деле есть еще один вариант — сделай несколько прототипов сразным окном ввода и отдай потенциальным пользователям — пропроси в каждом прототипе сделать 50 записей — все станет понятно.
Ну еще такой вопрос — завтра тебя попросят сделать редактирование этих значение в большой таблце без вызова окна детализации всей сущности — что будешь делать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Контрол для ввода величин с размерностями
От: Сергей Выдров  
Дата: 06.01.06 09:31
Оценка:
Здравствуйте, rlabs, Вы писали:

R>г) можно сделать выпадающую кнопку-toolbutton с величинами — с размерами там проще, чем у комбобокса, и можно даже собрать в кастомный контрол вида комбо-бокса. Только с клавиатуры будет не очень доступно, да и с интернационализацией проблемы


Типа так?



А ведь это, кстати, идея! Большое спасибо, что натолкнули.
Re[5]: Контрол для ввода величин с размерностями
От: Сергей Выдров  
Дата: 06.01.06 09:45
Оценка:
Здравствуйте, SEDEGOFF, Вы писали:

СВ>>... прапертных гридов...

SED>Неее, ну их нафиг. Все строю всегда на виртуальных датасетах и обычных гридах.

Это как? Генерируете контролы по узлам в соответствии с типами данных из датасета?

Как бы то ни было, мы с rlabs'ом говорили про PropertyGrid.

СВ>>Че-та ета... запутано как-то. Простота — залог здоровья. Решение "Edit + combo" явно лучше будет, на мой чайниковский взгляд. Напрягает меньше. Но жрет много места, зараза, и выглядит некрасиво.

SED>Сколько людей — столько и мнений. Мое мнение такое. Мышь — это зло.

Зло, не зло, а люди пользуются. Вон, в Акрилике специальный контрол разработали, чтобы удобно было числа мышью редактировать.

>Ввод одного значения должен быть организован в одном контроле.


Было бы неплохо.

>По тому опыту, который есть сейчас — редактирование сложного значения необходимо производить в оддельном окне. При этом не следует забывать — combo — штука со своими тараканами — не убрал во время фокус — крутанул колесико — пол отдела премии лишились .На самом деле есть еще один вариант — сделай несколько прототипов сразным окном ввода и отдай потенциальным пользователям — пропроси в каждом прототипе сделать 50 записей — все станет понятно.


Да не, мне дизайнеры подготовили несколько прототипов (я о них писал) — ни один не понравился настолько, чтобы я его кастомерам отправил. Думал вместе с ними (я ведь когда-то профессионально занимался юзабилити), ничего не придумал. Обратился сюда за советом.

SED>Ну еще такой вопрос — завтра тебя попросят сделать редактирование этих значение в большой таблце без вызова окна детализации всей сущности — что будешь делать?


Еще раз думать. Я не гоняюсь за излишним универсализмом.
Re[3]: Контрол для ввода величин с размерностями
От: Сергей Выдров  
Дата: 06.01.06 09:51
Оценка:
Здравствуйте, Сергей Выдров, Вы писали:

СВ>Здравствуйте, rlabs, Вы писали:


R>>г) ... и можно даже собрать в кастомный контрол вида комбо-бокса...


Кастомным единым контролом служит в данном случае тулбар. На скрине все элементы (label, edit, combo) сделаны тулбарными item'ами. Есть одна проблема — в общем случае, фон тулбара не очень подходит для отрисовки на форме, но для моего случая — в самый раз. А?
Re: Контрол для ввода величин с размерностями
От: Mamut Швеция http://dmitriid.com
Дата: 06.01.06 13:40
Оценка: 1 (1)
Здравствуйте, Сергей Выдров, Вы писали:

СВ>Как с ними быть?


СВ>Одна и та же величина может иметь разные размерности. Скажем, расстояние — в метрах или километрах. Как должен выглядеть элемент управления для ввода таких величин?


Как в Фотошопе — просто текстбокс, куда можно вводить, например 16 px, 8 pt, 7 mm и проч. — невероятно удобно. Какое-то значение выставляется "по умолчанию" в настройках — то есть та единица измерения, что автоматически выставится, если ввести просто цифру.

Если таким полем для ввода будут пользоваться часто, то я бы подумал об автокомлите/интеллисенсе — но тоже в пределах того же поля. то ест, юзер ввел 112, нажал пробел — ему вываливается комбобокс с единицами измерения.
... << RSDN@Home 1.2.0 alpha rev. 619>>


dmitriid.comGitHubLinkedIn
Re: Я сделал так:
От: c-smile Канада http://terrainformatica.com
Дата: 06.01.06 23:16
Оценка: 13 (3)
Здравствуйте, Сергей Выдров, Вы писали:

Re[4]: Контрол для ввода величин с размерностями
От: Сергей Выдров  
Дата: 08.01.06 11:03
Оценка:
Здравствуйте, Сергей Выдров, Вы писали:

СВ>>Здравствуйте, rlabs, Вы писали:


R>>>г) ... и можно даже собрать в кастомный контрол вида комбо-бокса...


СВ>Кастомным единым контролом служит в данном случае тулбар. На скрине все элементы (label, edit, combo) сделаны тулбарными item'ами. Есть одна проблема — в общем случае, фон тулбара не очень подходит для отрисовки на форме, но для моего случая — в самый раз. А?


Апдейт.

Да, это решение пошло в серию. Тулбар используется от дотнета 2.0, который поддерживает BackColor и разные render-режимы, за счет чего такое решение гораздо универсальнее, чем мне казалось в начале. Вполне можно положить и на обычную форму, и на панель задач.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.