воскресенье, 8 мая 2011 г.

Почему у элемента управления up-down стрелочки инвертированы?

Это перевод Why do up-down controls have the arrows backwards? Автор: Реймонд Чен.

Когда вы создаёте элемент управления up-down (некоторые люди называют его "spinner"-ом), то в его конфигурации по умолчанию стрелка вверх уменьшает значение, а стрелка вниз - увеличивает его. Большинство людей ожидает, что стрелка вверх будет увеличивать, а стрелка вниз - уменьшать. Почему же он работает наоборот?

Элемент управления up-down является жертвой обратной оси y в Windows.

Математически, точка (0, 0) должна находится в левом-нижнем углу монитора (к примеру, её там помещает OS/2), ось y увеличивается с движением вверх. Windows же, с другой стороны, располагает точку (0, 0) в верхнем-левом углу, а ось y увеличивается при движении вниз.

Какое это имеет отношение к вопросу?

Элемент управления up-down может быть размещён вертикально или горизонтально. Давайте сначала посмотрим на менее проблематичный случай: горизонтальное размещение. Windows и математики сходятся в том, что координата x увеличивается вправо, а правая стрелка (стрелка с большим значением x-координаты) увеличивает значение счётчика (для целей нашей дискуссии, давайте закроем глаза на случай с right-to-left языками).

Когда вы запрограммировали горизонтальную версию элемента управления, то конвертация его в вертикальный будет простой: вам нужно поменять местами оси x и y.

Вот почему верхняя стрелка уменьшает значение. Потому что она указывает в сторону меньшей координаты y и, соответственно, должна уменьшать значение.

Это великолепно логически и так же великолепно неинтуитивно (это поведение будет немного более интуитивно, если вы представите, что значение, контролируемое элементом up-down, является y-координатой визуального объекта на экране. В этом случае, щелчок по верхней стрелке приведёт к уменьшениею координаты y и движению объекта вверх по экрану).

К счастью, это недоразумение не просуществовало долго, потому что в тот момент, когда вы изменяете диапазон с (не очень полезного) умалчиваемого 0–100 до нужного вам в действительности, то стрелочки начинают вести себя "нормально".

Возможно, интуитивности стоило выиграть у логики ещё первый раунд. Но что сделано - то сделано. Как я сказал выше: эта проблема долго не существовала.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.