.NET и позволяет перетаскивать заранее определенные формы - PullRequest
0 голосов
/ 21 марта 2012

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

Я пытаюсь создать минимальный интерфейс, похожий на Visio.

Пока я учился в школе, я немного разбирался в .NET, поэтому я знаком с Winforms и GDI.,Я знаю, что могу довольно легко рисовать на экране и писать на нем.

То, что я сейчас ищу, - это больше способ позволить моему пользователю добавлять «формы» на холст.Подумайте о том, как Visio делает это с формами потоковых диаграмм, вы выбираете желаемую форму и можете опустить ее и настроить (ширину, высоту и т. Д.).

Мне удается сделать это с помощью простой формы GDI, такой как прямоугольник, но я не уверен, что нужно искать при проектировании форм всех видов.

Опять же, самый близкий пример, который я могу себе представить, это Visio, где вы можете выбрать параллелограмм для ввода данных, перетащить его на холст и настроить по необходимости.

То, что я имеюДо сих пор рассматривались с минимальным успехом:

  • Пользовательские фигуры;
  • Пользовательские элементы управления;
  • Включение дизайнера форм во время выполнения;
  • Векторная форма.

Есть ли какие-нибудь указатели относительно того, что я должен искать?

1 Ответ

1 голос
/ 21 марта 2012

Лучший способ приблизиться к этому - иметь пользовательские элементы управления. Создайте основной пользовательский элемент управления с именем Shape. Затем для каждой фигуры, которую вы хотите, например Line Shape, создайте класс с именем LineShape, производный от Shape. Кроме того, вы, вероятно, также захотите создать интерфейс под названием IShape. Пусть каждый из ваших классов фигур реализует этот интерфейс. Интерфейсы должны содержать методы, которые понадобятся всем формам. Например, вы захотите поместить метод в интерфейс EndPoints (), который определяет конечные точки, которые пользователь может перетаскивать, чтобы изменить размер фигуры. Поскольку каждая фигура будет получена из базового пользовательского элемента управления, у них уже будут возможности перетаскивания.

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

Ваш «холст» также должен быть пользовательским элементом управления. Вы захотите определить список List<IShape> для хранения каждого элемента формы, который перетаскивается на холст.

Для перетаскивания вам просто нужно включить это в элементе управления Shape, и он унаследует это от всех других форм. При перетаскивании на холст вы хотите убедиться, что перетаскиваемые данные имеют тип IShape, а если это так, вы вызовете DoDragDrop(), что позволит пользователю перетаскивать фигуры на холст.

Если вам нужна помощь, прочтите Интерфейсы и Элементы управления пользователя .

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

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