Bonjour,

J'esseye d'écrire un petit logiciel de dessin vectoriel en VB.NET (c'est en fait un soft que j'avais écrit en VB6 et qui tourne très bien ainsi d'ailleurs, très rapide, mais pour ma culture personnelle je souhaite le transposer en VB.NET)

L'objectif est d'utiliser les fonctionalités .NET pour ce qui est du graphisme, mais aussi et surtout de faire ça proprement en utilisant la POO.

En 2 mots, je souhaiterai créer une collection d'objets de types différents (des lignes, des cercles, des lignes de cotations, ...).

Pour celà, j'ai créé mes classes d'objets, avec leur caractéristiques propres, par exemple :

Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
class_Line
  properties x1,y1,x2,y2
  method Draw
  ...
class_Circle
  properties xCentre,yCentre,Rayon
  method Draw
  ...

Ce que je ne sais pas, c'est lorsque ces objets ont des properties communes, par exemple la Couleur, ou l'Epaisseur du trait, ... dois-je les définir dans chaque classe, ou est-ce plus propre de définir une classe commune dont on pourrait en sorte hériter, et comment ?

Ensuite, pour grouper mes objets, j'ai créé une collection, ou plus précisément une ArrayList (d'ailleur est-ce la meilleur solution et la plus rapide ?) :

Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
Dim myObjects As New ArrayList()

et j'y ajoute mes objets ainsi :

Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Dim newCircle As New class_Circle
With newCircle
  .xCentre = ...
  .yCentre = ...
  .Rayon = ...
End With
myObjects.Add(newCircle)

Donc déjà jusque là, suis-je à peu près ok ?

Ensuite, lorsque je veux par exemple tout redessiner, je fais ainsi :

Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
For i As Integer = 0 To myObjects.Count - 1
  Select Case myObjects(i).GetType.Name
     Case Is = "class_Line"
       CType(myObjects(i), class_Line).Draw(.....)
     Case Is = "class_Circle"
       CType(myObjects(i), class_Circle).Draw(.....)
  End Select
Next

Là par contre, je sens que vous allez tiquer... utiliser CType pour accéder aux methods propre à chaque classe, je ne trouve pas ça génial, mais je ne sais pas comment faire autrement ?

Voilà, donc si vous avez la bonne marche à suivre, je suis preneur !

Merci d'avance !!!
Rod