Дизайн пользовательского интерфейса для двунаправленного поиска перечислений - PullRequest
3 голосов
/ 03 февраля 2010

У меня есть файл, в котором хранится список перечислений с соответствующими значениями. Ниже приведена иллюстрация того, как выглядит файл (а не его фактическое содержимое):

Enumerated value        Meaning (associated text)
0                       Sunday
1                       Monday
2                       Tuesday
3                       Wednesday
4                       Thursday
5                       Friday
6                       Saturday

Я пишу программу на C #, чтобы пользователи могли искать между перечисленными значениями и связанными с ними текстами. Другими словами, они должны иметь возможность искать текст по значению, и наоборот.

Интересно, как лучше спроектировать пользовательский интерфейс? У меня есть несколько идей:

  1. Есть два текстовых поля. Пользователь может заполнить любой из них, а другой автоматически заполняется как пользовательские типы. Если значение недопустимо, просто оставьте другое текстовое поле пустым.
  2. Иметь текстовое поле для пользователя, чтобы заполнить часть имеющейся у него информации, переключатель, чтобы указать, какую информацию он вводит в текстовое поле, кнопку OK, которая при нажатии обновляет текстовую метку с помощью результат или сообщение об ошибке.
  3. То же, что 2, но нет кнопки ОК. Просто обновите текстовую метку, когда пользователь вводит текст (т. Е. Обрабатывает событие Control.KeyPress).
  4. Имеет два отдельных экрана (один для поиска в перечислении по тексту, другой для поиска по тексту из перечисления), и пользователь может переключаться между ними с помощью вкладки или кнопки. Иметь текстовое поле для ввода пользователем, кнопку ОК и текстовую метку для отображения результата или сообщения об ошибке.
  5. Имеют две отдельные области на одном экране. Каждая область имеет тот же формат, что и в 4.

Я подумал, что 2 - это то, что я ожидал бы от приложения с графическим интерфейсом, хотя оно может быть немного медленным, и возникает проблема с тем, что отображать, если пользователь просто набрал «S» и нажал OK. Вариант 1 сложнее, но может быть более интерактивным (отображает ответ быстрее).

Извините, если это не совсем вопрос программирования, но я думаю, что это проблема дизайна пользовательского интерфейса, которая возникает достаточно часто. Кто-нибудь знает какие-либо лучшие отраслевые стандарты, пожалуйста?

Большое спасибо.

Ответы [ 5 ]

2 голосов
/ 03 февраля 2010

Сколько предметов вы ожидаете иметь в списке? Если это достаточно небольшое число, возможно, <100, я бы на самом деле выбрал подход Tufte и просто отобразил две хорошо спроектированные таблицы рядом (одна отсортирована по значению, а другая по значению). Связь глаз / мозг может анализировать данные намного быстрее, чем мы думаем; Я думаю, Tufte утверждает, что каждый глаз способен к ~ 10 Мбит / с. </p>

Если у вас много разных типов данных, я думаю, что # 1 - ваш лучший выбор. Наименьшее количество элементов управления формы, и вы можете быстро получить данные через AJAX или встроенный массив. Убедитесь, что ваш учебный текст совершенно ясен и лаконичен.

Единственный недостаток этого подхода, который я вижу, заключается в том, что он не позволяет пользователям видеть соответствующий набор данных и самостоятельно устанавливать шаблоны. Например, если вы скажете мне, что 0 = воскресенье и 1 = понедельник, я могу сделать разумное предположение, что 2 = вторник. Если пользователь понимает шаблон, я бы предпочел, чтобы он использовал его, а не использовал форму для каждого отдельного значения.

1 голос
/ 04 февраля 2010

Я использовал решение типа # 1 один раз. Важная часть - убедиться, что вы всегда синхронизируете блоки, иначе пользователь может неправильно прочитать старое значение как допустимый перевод. В моем случае я очистил другое поле, как только пользователь начал печатать (или даже вставлять) в одном.

Это также зависит от типа использования - будет ли оно часто использоваться пользователями и может позволить некоторую кривизну обучения, если минимизирует нажатия клавиш, или что-то, с чем данный пользователь редко сталкивается?

1 голос
/ 03 февраля 2010

Я думаю, что ваши варианты слишком сложны. При условии, что нет необходимости просматривать значения, я думаю, что лучший интерфейс на основе клавиатуры будет иметь только одно текстовое поле с функцией автозаполнения и метку рядом (ниже) для отображения результата.

По мере ввода пользователем программа ищет ОБА значения и тексты и представляет частичные совпадения в качестве предложений. Как только происходит совпадение (полное или, может быть, даже частичное), отображается его аналог. Поэтому, если сопоставление со значением, отображается соответствующий текст, и наоборот.

Или, что еще проще, просто отобразите список совпадающих пар «значение-текст» в качестве пользовательских типов, постепенно обновляемых с каждым введенным символом. Нет необходимости нажимать Enter вообще.

0 голосов
/ 09 февраля 2010

Большое спасибо за ваши ответы. Рассмотрев все ваши комментарии, я подготовил предложение по интерфейсу.

  • В начале программы будет загружен список всех перечисленных полей и их номеров, а также их перечисленных значений.
  • Исходный интерфейс будет состоять из TextBox и ListBox. Первоначально ListBox покажет все перечисленные поля. Когда пользователь вводит текстовое поле, элементы, которые не совпадают (либо имя поля, либо номер поля), будут удалены из списка.
  • Двойным щелчком мыши по элементу (то есть перечисляемому полю) в ListBox или выбором его и последующим нажатием клавиши ENTER открывается новое окно.
  • В новом окне будут отображены все перечисленные значения и связанный с ними текст (для перечисленного поля, выбранного в первом окне) в таблице с двумя столбцами.
  • Список можно отсортировать, нажав на столбцы. Пользователь также должен иметь возможность использовать Ctrl-F для поиска в списке (надеюсь, это разрешено в приложениях C #).

Я сделал выбор для начального окна, чтобы упростить интерфейс (только 1 текстовое поле и список) и сделать его простым в использовании. Кроме того, я думаю, что совместное отображение перечисленных значений и предоставление пользователю возможности играть с информацией по своему усмотрению намного лучше, чем скрывать все за сложным интерфейсом.

Будем весьма благодарны за ваши отзывы о дизайне интерфейса.

PS В настоящее время пользователям необходимо перейти на веб-сайт, найти последнюю версию XML-документа, загрузить его, открыть его, а затем выполнить поиск в XML, чтобы найти поле, которое они ищут, а затем значение, которое им нужно. Мое приложение должно очень сильно упростить для них вещи.

0 голосов
/ 03 февраля 2010

Если у вас есть перечисления, настроенные примерно так

public enum Days { Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6 };

Не могли бы вы просто использовать несколько вспомогательных методов?

    public static int GetEnumValue(string name, Type enumType)
    {
       int result = -1;

       foreach (var item in Enum.GetValues(enumType))
       {
           if (item.ToString() == name)
           {
               result = (int) item;
               break;
           }

       }

       return result;
    }

    public static string GetEnumValue(int value, Type enumType)
    {
        string result = null;

        foreach (var item in Enum.GetValues(enumType))
        {
            if ((int)item  == value)
            {
                result = item.ToString();
                break;
            }
        }

        return result;
    }

Или я неправильно понял вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...