Я преобразовал граничные полигоны почтового индекса для указания на данные (точка [] для каждого полигона) из Файлов форм GIS.
Я желаю показать это в c# приложении форм окон.
Мне удалось показать это использование System.Drawing
(GDI +) DrawPolygon () метод.
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);
Действительно ли возможно добавить события к оттянутому полигону? Раз так, как я делаю это для отдельных полигонов. Например, нажмите на полигон почтового индекса, и messagebox показывает информацию о почтовом индексе.
Во-вторых, был бы это быть легче сделать пользовательский элемент управления, наследовавший панель winforms. Существует ли способ сформировать границу управления панелью winforms с помощью ряда точек?
Объекты почтового индекса сериализируются и хранятся в файловой системе.
Использование элементов управления нестандартной формы потребует некоторой настройки, но когда вы все сделаете правильно, Windows позаботится о проверке попадания за вас.
Если вы решите использовать подход GDI +, вы захотите нарисовать многоугольники в обработчике событий Paint
вашей формы и обработать событие MouseDown
, чтобы вычислить в какой многоугольник попадают координаты.
«Нарисованный» многоугольник больше не является объектом, поэтому нет возможности добавлять к нему события. Однако вы можете создать класс Polygon с помощью метода void PaintMe (Graphics g)
и метода bool HitTest (int x, int y)
, чтобы у вас была вся логика в одном классе.