2010-05-14 3 views
1

I ont converti polygones de délimitation code postal pour pointer les données (le point [] pour chaque polygone) de forme SIG fichiers.WinForms GDI + polygonales événements et les panneaux en forme personnalisée

Je suis désireux de le montrer dans une fenêtre C# forme application.

J'ai réussi à montrer en utilisant la méthode 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); 

Est-il possible d'ajouter des événements à un polygone dessiné? Si oui, comment puis-je faire cela pour des polygones individuels? Par exemple, cliquez sur un polygone de code postal et une boîte de message affiche des informations sur le code postal.

En second lieu, serait-il plus facile de faire un contrôle personnalisé héritant le panneau WinForms. Existe-t-il un moyen de définir la bordure d'un contrôle de panneau winforms en utilisant un ensemble de points?

Les objets de code postal sont sérialisés et stockés dans le système de fichiers.

+1

Très cool! Je n'ai pas essayé quelque chose comme ça dans .Net, mais Google autour de l'API SetWindowRgn - c'est comme ça que j'ai fait ça avec de l'API pur. Je ne sais pas non plus s'il est plus facile d'utiliser des ressources pour sortir d'un label ou d'un panneau. Je ne le soupçonne pas. – overslacked

Répondre

2

L'utilisation de commandes en forme sur mesure, il faudra un peu de peaufinage, mais quand vous l'obtenez droit, Windows se chargera des tests de succès pour vous. Si vous choisissez d'utiliser l'approche GDI +, vous devrez dessiner les polygones dans le gestionnaire d'événements Paint de votre formulaire et gérer l'événement MouseDown pour déterminer dans quel polygone les coordonnées se situent.

polygone A « dessiné » n'est plus un objet, donc il n'y a aucun moyen d'ajouter des événements à elle. Vous pouvez cependant créer une classe Polygon avec une méthode void PaintMe(Graphics g) et une méthode bool HitTest(int x, int y) afin d'avoir toute la logique dans une classe.

+0

Merci, j'ai créé un contrôle utilisateur personnalisé, et utilisé le champ Région et le chemin GDI + Graphics pour créer la bordure personnalisée. HitTest est géré par Windows. – Darbio

Questions connexes