WinForms GDI + Polygon Events и пользовательские панели - PullRequest
1 голос
/ 14 мая 2010

Я преобразовал граничные полигоны почтовых индексов в точечные данные (точки [] для каждого полигона) из файлов форм ГИС.

Я хочу показать это в приложении c # windows form.

Мне удалось показать это с помощью метода DrawPolygon () System.Drawing (GDI +).

Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Black);
Brush brush = new SolidBrush(Color.FromArgb(255,255,o));

PointF[] ptr = { point data here };

g.FillPolygon(brush, ptr);
g.DrawPolygon(pen, ptr);

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

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

Объекты почтовых индексов сериализуются и сохраняются в файловой системе.

1 Ответ

2 голосов
/ 14 мая 2010

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

Если вы решите использовать подход GDI +, вы захотите нарисовать полигоны в обработчике событий Paint вашей формы и обработать событие MouseDown, чтобы выяснить, в какой полигон попадают координаты.

«Нарисованный» многоугольник больше не является объектом, поэтому нет возможности добавлять к нему события. Однако вы можете создать класс Polygon с методом void PaintMe(Graphics g) и методом bool HitTest(int x, int y), чтобы у вас была вся логика в одном классе.

...