WinForms GDI +多边形事件和定制形状的面板

时间:2010-05-14 01:59:17

标签: c# .net winforms gdi+ panel

我已经从GIS形状文件中将邮政编码边界多边形转换为点数据(每个多边形的point [])。

我想在c#windows窗体应用程序中显示它。

我已设法使用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);

是否可以向绘制的多边形添加事件?如果是这样,我该如何为单个多边形执行此操作。例如,单击邮政编码多边形,消息框显示有关邮政编码的信息。

其次,使自定义控件继承winforms面板会更容易。有没有办法使用一组点来形成winforms面板控件的边框?

邮政编码对象被序列化并存储在文件系统中。

1 个答案:

答案 0 :(得分:2)

使用自定义形状的控件需要稍微调整一下,但是当你做对了,Windows会为你处理命中测试。

如果您选择使用GDI +方法,则需要在表单的Paint事件处理程序中绘制多边形,并处理MouseDown事件以确定坐标的哪个多边形掉进。

“绘制”多边形不再是对象,因此无法向其添加事件。但是,您可以使用方法void PaintMe(Graphics g)和方法bool HitTest(int x, int y)创建一个Polygon类,这样您就可以在一个类中拥有所有逻辑。