Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinForms GDI+;多边形事件和自定义形状的面板_C#_.net_Winforms_Gdi+_Panel - Fatal编程技术网

C# WinForms GDI+;多边形事件和自定义形状的面板

C# WinForms GDI+;多边形事件和自定义形状的面板,c#,.net,winforms,gdi+,panel,C#,.net,Winforms,Gdi+,Panel,我已将邮政编码边界多边形从GIS形状文件转换为点数据(每个多边形的点[]) 我想在一个c#windows窗体应用程序中显示这一点 我已经设法使用System.Drawing(GDI+)DrawPolygon()方法显示了这一点 是否可以向绘制的多边形添加事件?如果是,如何对单个多边形执行此操作。例如,单击邮政编码多边形,消息框将显示有关邮政编码的信息 其次,创建一个继承winforms面板的自定义控件是否更容易。有没有一种方法可以使用一组点来塑造winforms面板控件的边框 邮政编码对象被序列

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

我想在一个c#windows窗体应用程序中显示这一点

我已经设法使用
System.Drawing
(GDI+)DrawPolygon()方法显示了这一点

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

其次,创建一个继承winforms面板的自定义控件是否更容易。有没有一种方法可以使用一组点来塑造winforms面板控件的边框


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

使用自定义形状的控件将需要一些调整,但当您正确操作时,Windows将为您处理命中测试

如果选择使用GDI+方法,则需要在窗体的
Paint
事件处理程序中绘制多边形,并处理
MouseDown
事件以确定坐标属于哪个多边形


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

非常酷!我没有在.Net中尝试过类似的东西,但是谷歌搜索setWindowRGNAPI——这就是我使用纯API的方式。我也不知道从标签上下来是否比从面板上下来更方便资源;不过我想不会。谢谢,我创建了一个自定义用户控件,并使用区域字段和GDI+图形路径创建自定义边框。HitTest由Windows处理。
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);