Одна и та же величина может иметь разные размерности. Скажем, расстояние — в метрах или километрах. Как должен выглядеть элемент управления для ввода таких величин?
Классика — рядом поместить Edit box и Combo box. Но они имеют разную высоту, за что очень спасибо мелкософту. Да и пользоваться таким решением не очень удобно, с т.з. реализации — такой сборный компонент нельзя использовать как одно окно. А варианты с невидимыми панелями отпадают по причине того, что компоненты-подложки, на которых предполагается использовать эту панель, как правило, имеют стиль clip children. Мне кроме masked edit более ничего в голову не приходит. Еще я смотрел варианты с PropertyGrid (значение-размерность-значение-размерность, сверху вниз) и еще раз убедился, что это мертворожденный компонент, который в нормальном GUI следует использовать очень осторожно.
По-моему, тут все сильно зависит от конкретного случая и контекста. Скажем, в случае с километрами вполне можно разрешить прямо в edit писать 100м или 1.8км и разбирать это, а размерноость по умолчанию указать рядом статиком (м). Чтобы сделать возможности учевидными, просто автоматически приводить 2000 к 2км. В случае нескольких значений с общей единицей, обычно используют радио-кнопки (если вариантов немного, типа cm\inch). Иногда, полагаю, можно и просто чекбоксом обойтись — когда есть общепринятая единица, и есть возможность использовать альтернативу.
По-поводу использования, кстати — мне как-то приходилось в молодости делать нечто похожее, там был комплект из 3 контролов. На форме ставился только edit, а свой DDX_Control (VC++\MFC) создавал дополнительно кнопку и чекбокс, подбирая свободный ID на диалоге, позиционировал их и обеспечивая прозрачный обмен. Уверен, на каком-нибудь Delphi это еще проще было бы. Так что все от реализации зависит.
Здравствуйте, Сергей Выдров, Вы писали:
СВ>Одна и та же величина может иметь разные размерности. Скажем, расстояние — в метрах или километрах. Как должен выглядеть элемент управления для ввода таких величин?
Ну например:
а) если разноразмерные величины не могут существовать одновременно (в одном сеансе), вынести единицу измерения в настройки; как это делают, например, различные "чертежные" и проектировочные приложения
б) разобрать строчку вида 15m45cm3mm не так уж сложно, в принципе (но всед за этим в требованиях может появиться "калькулятор в поле", а кому это надо?
в) если параметров не очень много, и размерностей тоже — можно скомбинировать radiobutton+edit и переключать их
г) можно сделать выпадающую кнопку-toolbutton с величинами — с размерами там проще, чем у комбобокса, и можно даже собрать в кастомный контрол вида комбо-бокса. Только с клавиатуры будет не очень доступно, да и с интернационализацией проблемы
д) можно тупо — maskedit, а единицу из контекстного меню выбирать. Минус — пользователь-новичок низачто не врубится, как сменить единицы измерения.
А гридами действительно не стоит увлекаться, неудобные они, да и некрасивые.
R>А гридами действительно не стоит увлекаться, неудобные они, да и некрасивые.
Вот потому и не согласен.
Собственно по вопросу.
Есть Edit с Button при нажатии на Button (или Alt+Down) открывается окно редагтирования с тем же гридом, везде стоят нули и фокус на ячейке с размерностью по умолчанию. Пользователь вводит число и нажимает ОК (Ctrl+Enter). Все. Нажимая стрелки вверх или вниз — перемещается по строкам гриду. Если пользователь начинает нажимать буквы — начинается поиск соответствующей размерности.
Здравствуйте, SEDEGOFF, Вы писали:
R>>А гридами действительно не стоит увлекаться, неудобные они, да и некрасивые. SED>Вот потому и не согласен.
Я когда-то был фаном этих прапертных гридов, причем как пользователь, а не программист. Очень меня напрягало, что в Delphi такая штука есть, а в VC 6.0, которой я тогда пользовался — нет. Теперь я хладнокровно считаю, что надо быть настоящим гиком от программирования, чтобы любить эти штуки. Обычного пользователя очень обламывает заполнять сетки.
SED>Собственно по вопросу. SED>Есть Edit с Button при нажатии на Button (или Alt+Down) открывается окно редагтирования с тем же гридом, везде стоят нули и фокус на ячейке с размерностью по умолчанию. Пользователь вводит число и нажимает ОК (Ctrl+Enter). Все. Нажимая стрелки вверх или вниз — перемещается по строкам гриду. Если пользователь начинает нажимать буквы — начинается поиск соответствующей размерности.
Че-та ета... запутано как-то. Простота — залог здоровья. Решение "Edit + combo" явно лучше будет, на мой чайниковский взгляд. Напрягает меньше. Но жрет много места, зараза, и выглядит некрасиво.
СВ>... прапертных гридов...
Неее, ну их нафиг. Все строю всегда на виртуальных датасетах и обычных гридах.
СВ>Че-та ета... запутано как-то. Простота — залог здоровья. Решение "Edit + combo" явно лучше будет, на мой чайниковский взгляд. Напрягает меньше. Но жрет много места, зараза, и выглядит некрасиво.
Сколько людей — столько и мнений. Мое мнение такое. Мышь — это зло. Ввод одного значения должен быть организован в одном контроле. По тому опыту, который есть сейчас — редактирование сложного значения необходимо производить в оддельном окне. При этом не следует забывать — combo — штука со своими тараканами — не убрал во время фокус — крутанул колесико — пол отдела премии лишились . На самом деле есть еще один вариант — сделай несколько прототипов сразным окном ввода и отдай потенциальным пользователям — пропроси в каждом прототипе сделать 50 записей — все станет понятно.
Ну еще такой вопрос — завтра тебя попросят сделать редактирование этих значение в большой таблце без вызова окна детализации всей сущности — что будешь делать?
Здравствуйте, rlabs, Вы писали:
R>г) можно сделать выпадающую кнопку-toolbutton с величинами — с размерами там проще, чем у комбобокса, и можно даже собрать в кастомный контрол вида комбо-бокса. Только с клавиатуры будет не очень доступно, да и с интернационализацией проблемы
Типа так?
А ведь это, кстати, идея! Большое спасибо, что натолкнули.
Здравствуйте, SEDEGOFF, Вы писали:
СВ>>... прапертных гридов... SED>Неее, ну их нафиг. Все строю всегда на виртуальных датасетах и обычных гридах.
Это как? Генерируете контролы по узлам в соответствии с типами данных из датасета?
Как бы то ни было, мы с rlabs'ом говорили про PropertyGrid.
СВ>>Че-та ета... запутано как-то. Простота — залог здоровья. Решение "Edit + combo" явно лучше будет, на мой чайниковский взгляд. Напрягает меньше. Но жрет много места, зараза, и выглядит некрасиво. SED>Сколько людей — столько и мнений. Мое мнение такое. Мышь — это зло.
Зло, не зло, а люди пользуются. Вон, в Акрилике специальный контрол разработали, чтобы удобно было числа мышью редактировать.
>Ввод одного значения должен быть организован в одном контроле.
Было бы неплохо.
>По тому опыту, который есть сейчас — редактирование сложного значения необходимо производить в оддельном окне. При этом не следует забывать — combo — штука со своими тараканами — не убрал во время фокус — крутанул колесико — пол отдела премии лишились .На самом деле есть еще один вариант — сделай несколько прототипов сразным окном ввода и отдай потенциальным пользователям — пропроси в каждом прототипе сделать 50 записей — все станет понятно.
Да не, мне дизайнеры подготовили несколько прототипов (я о них писал) — ни один не понравился настолько, чтобы я его кастомерам отправил. Думал вместе с ними (я ведь когда-то профессионально занимался юзабилити), ничего не придумал. Обратился сюда за советом.
SED>Ну еще такой вопрос — завтра тебя попросят сделать редактирование этих значение в большой таблце без вызова окна детализации всей сущности — что будешь делать?
Еще раз думать. Я не гоняюсь за излишним универсализмом.
Здравствуйте, Сергей Выдров, Вы писали:
СВ>Здравствуйте, rlabs, Вы писали:
R>>г) ... и можно даже собрать в кастомный контрол вида комбо-бокса...
Кастомным единым контролом служит в данном случае тулбар. На скрине все элементы (label, edit, combo) сделаны тулбарными item'ами. Есть одна проблема — в общем случае, фон тулбара не очень подходит для отрисовки на форме, но для моего случая — в самый раз. А?
Здравствуйте, Сергей Выдров, Вы писали:
СВ>Как с ними быть?
СВ>Одна и та же величина может иметь разные размерности. Скажем, расстояние — в метрах или километрах. Как должен выглядеть элемент управления для ввода таких величин?
Как в Фотошопе — просто текстбокс, куда можно вводить, например 16 px, 8 pt, 7 mm и проч. — невероятно удобно. Какое-то значение выставляется "по умолчанию" в настройках — то есть та единица измерения, что автоматически выставится, если ввести просто цифру.
Если таким полем для ввода будут пользоваться часто, то я бы подумал об автокомлите/интеллисенсе — но тоже в пределах того же поля. то ест, юзер ввел 112, нажал пробел — ему вываливается комбобокс с единицами измерения.
Здравствуйте, Сергей Выдров, Вы писали:
СВ>>Здравствуйте, rlabs, Вы писали:
R>>>г) ... и можно даже собрать в кастомный контрол вида комбо-бокса...
СВ>Кастомным единым контролом служит в данном случае тулбар. На скрине все элементы (label, edit, combo) сделаны тулбарными item'ами. Есть одна проблема — в общем случае, фон тулбара не очень подходит для отрисовки на форме, но для моего случая — в самый раз. А?
Апдейт.
Да, это решение пошло в серию. Тулбар используется от дотнета 2.0, который поддерживает BackColor и разные render-режимы, за счет чего такое решение гораздо универсальнее, чем мне казалось в начале. Вполне можно положить и на обычную форму, и на панель задач.