2010-10-19 33 views
0

Je suis nouveau en C# mais pas en POO. Je voudrais faire un panneau "canvas" sur lequel un utilisateur peut dessiner des formes en cliquant sur la souris, mais aussi les supprimer (rien de fantaisie, des tailles fixes et autres joyeusetés, des objets en plaine). Comme je l'ai dit, je veux que l'utilisateur puisse supprimer tous les objets sur lesquels il clique.C# - Y a-t-il (similaire) .AddChild et .AddEventListeners en C# et peuvent-ils être utilisés sur Graphics?

Je ne sais pas exactement comment je pourrais y arriver. Si je l'aide de Flash, je ferais probablement quelque chose comme:

my_circle_object = new disc-or-whatever-etc; 
canvas.addChild(my_circle_object); 
my_circle_object.AddEventListener(MouseClickEvent, function_to_remove_child); 

Maintenant, puisque les langages compilés sont le diable quand il vient à l'interface utilisateur simple, front-end des choses liées, je suis sûr que ça va prendre 20 fois plus de code pour écrire ceci en C#. Mais, y a-t-il quelque chose de semblable à mon exemple?

J'ai passé toute lecture de l'après-midi sur des choses comme GraphicsContainers, SmoothingPaint, persistance des graphiques en utilisant bitmaps etc., mais je ne trouve une méthode simple événement add ..

Merci

+0

Vous devriez envisager de regarder [Windows Presentation Foundation (WPF)] (http://msdn.microsoft.com/en-us/library/aa970268.aspx), qui contient déjà les classes et les infrastructures nécessaires pour ajouter des formes sur un canevas et un lien vers des événements individuels pour chaque forme (ou tout simplement attraper tous les événements pour les objets contenus dans une toile). En fait, WPF est la base de Silverlight, le concurrent direct de Microsoft pour Flash. –

+0

OMG mec, je n'ai jamais pensé à regarder dans le type de projet Application WPF. C'est génial, c'est comme MXML et ActionScript, ça va rendre ma vie beaucoup plus facile. Merci de me pointer dans la bonne direction :) (J'espère que mon prochain laboratoire C# à l'université nous permettra d'utiliser WPF) – Spectraljump

Répondre

0

Les objets que vous dessinez l'utilisation des méthodes de forme sur un objet Graphics (par exemple, DrawLine, DrawEllipse, DrawRect, etc.) ne représente pas les objets conceptuels en ce qui concerne l'API graphique. L'appel de ces fonctions dessine simplement l'élément sur la surface graphique en tant que bitmap. Une fois cela fait, il n'y a rien là pour attacher un événement.

Vous devrez créer vos propres types de formes et les faire dessiner sur l'objet graphique. Vous devrez vous attacher aux événements souris appropriés sur n'importe quel contrôle que vous utilisez (je suppose un Panel) et faire votre propre détection de collision.

+0

Merci pour votre réponse. Alors devrais-je créer, disons, une classe Circle qui crée un nouvel objet graphique avec une ellipse, puis ajouter circle_instance au Panel? (Si oui, comment puis-je ajouter un objet à un groupe par le code en C#?) – Spectraljump

+0

@Twodordan: Non, vous souhaitez créer un objet 'Circle' qui contient les informations * à propos * le cercle (emplacement, le diamètre, la couleur, etc.), lorsque l'événement '' Paint' de Panel' feux, vous feriez passer l'objet 'Graphics' fourni dans ce cas, à toutes les différentes formes dans votre' Panel' (vous aurez besoin pour maintenir votre propre liste quelque part) et leur permettre de se dessiner sur l'objet 'Graphics' fourni. –

+0

Merci. C'est comme ça que ça fonctionne. – Spectraljump