none
разработка приложения RRS feed

  • Вопрос

  • Существует программа Autocad (векторный графический редактор) компании AuteDesk (если важно, то встроенным языком программирования для создания надстроек является Lisp), мне нравится как там реализована идея взаимодействия пользователя с программой:

    1.Стандартная: пользователь тыкает меню или кнопочку тулбара, и ему предлагается мышкой указать координаты, выбрать объекты и тд - задать все необходимые для выполнения команды параметры. Количество параметров для каждой команды разное, их последовательность можно изменять, выбирая подпункты меню или появляющееся контекстное меню, ввод параметров в приложения разделяется клавишой "ентер".

    2.Альтернативный: с клавитатуры набираете имя комманды > клавиша "ентер", набираете имя параметра из предлагаемого списка (или первые буквы имени параметра) > клавиша "ентер", набираете значение "клавиша "ентер" и тд. пока не введете все параметры

    после этого графический объект, над которым совершена команда, изменяет свои параметры (положение, добавился, удалился).

    Собствено проблемы:

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

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

    3. как реализовать возможность отменить/вернуть действие?


    • Изменено MAsp1 14 мая 2012 г. 4:31

Ответы

  • Если вы разрабатываете с помощью WPF, то в нем есть специальная система команд, которая идеально подходит для вашего случая. Хорошо и внимательно изучите  эту систему и дело пойдет в разы быстрее.
    Если используете WinForms, то все равно почитайте про команды в WPF и используйте идею при написании своих классов.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа MAsp1 14 мая 2012 г. 22:07
  • 3. как реализовать возможность отменить/вернуть действие?

    Хе-хе, это отдельная песня на пол тома :) Для этого во-первых обязательно нужны команды, во вторых, можете почитать вот здесь пример реализации (хоть и далеко не полный, на практике приходится делать сложнее):

    Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес: Приемы ООП. Паттерны проектирования

    Но скажу сразу - поддержка undo/redo на порядок усложняет приложение. Вам оно точно надо?

    • Помечено в качестве ответа MAsp1 14 мая 2012 г. 22:07

Все ответы

  • Если вы разрабатываете с помощью WPF, то в нем есть специальная система команд, которая идеально подходит для вашего случая. Хорошо и внимательно изучите  эту систему и дело пойдет в разы быстрее.
    Если используете WinForms, то все равно почитайте про команды в WPF и используйте идею при написании своих классов.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа MAsp1 14 мая 2012 г. 22:07
  • 3. как реализовать возможность отменить/вернуть действие?

    Хе-хе, это отдельная песня на пол тома :) Для этого во-первых обязательно нужны команды, во вторых, можете почитать вот здесь пример реализации (хоть и далеко не полный, на практике приходится делать сложнее):

    Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес: Приемы ООП. Паттерны проектирования

    Но скажу сразу - поддержка undo/redo на порядок усложняет приложение. Вам оно точно надо?

    • Помечено в качестве ответа MAsp1 14 мая 2012 г. 22:07
  • > 3. как реализовать возможность отменить/вернуть действие?

    Можно посмотреть вот этот материал. Конечно, это не решит все вопросы, т. к. отменять/повторять прорисовку объекта в любом случае придётся дополнительно.