Sélection d'une forme dans un picturebox

Résolu
drenalyn51 Messages postés 3 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 28 septembre 2008 - 26 sept. 2008 à 20:49
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 28 sept. 2008 à 17:38
Bonjours à tous et à toutes!
Voilà, j'ais un picturebox,dedans j'y met un petit déssin:
 (C'est fait avec vb.net 2008)

Dim NewGraphic
As
Graphics = PictureBox1.CreateGraphics()

Dim blackPen
As

New
Pen(Color.Black, 1) NewGraphic.DrawRectangle(blackPen, 100, 100, 40, 20)

NewGraphic.DrawLine(blackPen, 130, 100, 110, 120)

Je peut y créer un rectangle de sélection: (Code trouvé sur le site)

'Les coordonnees utilisees pour dessiner notre rectangle

Private Xstart, Ystart, Xend, Yend
As

Integer

Private
Sub
PictureBox1_MouseDown(
ByVal
sender
As

Object
,
ByVal
e
As
System.Windows.Forms.MouseEventArgs)
Handles
PictureBox1.MouseDown

'Si click gauche

If e.Button = MouseButtons.Left
Then

'Initialisation des coordonnesXstart = e.X

Ystart = e.Y

Xend = e.X

Yend = e.Y

'Declaration du rectangle

Dim r
As
Rectangle

'On dessine le rectangle en utilisant la fonction RectangleToScreen

'qui convertie les coordonnes du rectangle par rapport a l'ecranr = PictureBox1.RectangleToScreen(

New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart))

'On dessine un rectangle inversee qui laissera visible l'interieur du rectangleControlPaint.DrawReversibleFrame(r,

Me.BackColor, FrameStyle.Dashed)

End
If

'End If

End
Sub

Private
Sub
PictureBox1_MouseMove(
ByVal
sender
As

Object
,
ByVal
e
As
System.Windows.Forms.MouseEventArgs)
Handles
PictureBox1.MouseMove

'Quand clique gauche

If e.Button = MouseButtons.Left
Then

'On efface l'ancien rectangle

Dim r
As
Rectangle r = PictureBox1.RectangleToScreen(

New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart)) ControlPaint.DrawReversibleFrame(r,

Me.BackColor, FrameStyle.Dashed)

'Nouvelles coordonnees de la souris quand on la bougeXend = e.X

Yend = e.Y

'On redessine le rectangle avec les nouvelles coordonnes de la sourisr = PictureBox1.RectangleToScreen(

New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart)) ControlPaint.DrawReversibleFrame(r,

Me.BackColor, FrameStyle.Dashed)

End
If

End
Sub

Private
Sub
PictureBox1_MouseUp(
ByVal
sender
As

Object
,
ByVal
e
As
System.Windows.Forms.MouseEventArgs)
Handles
PictureBox1.MouseUp

If e.Button = MouseButtons.Left
Then

'On efface le dernier rectangle

Dim r
As
Rectangle r = PictureBox1.RectangleToScreen(

New Rectangle(Xstart, Ystart, Xend - Xstart, Yend - Ystart)) ControlPaint.DrawReversibleFrame(r,

Me.BackColor, FrameStyle.Dashed)

End
If

End
Sub

Donc Comment faire pour sélectionner ce petit déssin , le déplacer et le mettre ailleur dans ma picturebox?

Désolé pour la longueur , je débute avec VB.NET 2008
Merci beaucoup par avance!!!

5 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
28 sept. 2008 à 17:38
Non je n'ai pas de code pour t'aider....

Je te conseil déjà de faire une interface permettant de décrire une forme, puis de faire une classe pour chaque forme implémentant cette interface:

Public Interface IShape
    ReadOnly Property TypeOfShape As TypeOfShape
    Property BackColor As Color
    Property Bounds As Rectangle
End Class

Public Enum TypeOfShape
    Rectangle
    Ellipse
    Image
End Enum

Public Class ShapeRectangle
    Implements IShape

    Public Readonly Property TypeOfShape As TypeOfShape Implements IShape.TypeOfShape
        Get
            Return TypeOfShape.Rectangle
        End Get
    End Property

    Public Property BackColor As Color Implements IShape.BackColor
        Get

            Return _BackColor

        End Get
        Set(Value As Color)
             _BackColor = Value
        End Set
    End Property
    Private _BackColor As Color

    etc...

End Class

Ca peut te mettre sur la piste, mais si tu es débutant il est clair que ça va pas être très facile
3
68manu Messages postés 43 Date d'inscription samedi 20 septembre 2008 Statut Membre Dernière intervention 1 octobre 2008
26 sept. 2008 à 23:07
Salut,

Simple, utilise l'evenement DoDragDrop de la PictureBox
Apres il faut coder un peu... Mais ca c'est le plaisir de VB.net

Bonne chance.

_____________________
No problems, only soluces
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
27 sept. 2008 à 01:00
Salut,
Tu te trompe 68manu, un dessin dans une PictureBox n'est rien d'autre que des pixels coloriés, il ne s'agit pas d'un contrôle ayant des propriétés et des événements tel que DoDragDrop.
Il faut tout faire manuellement, il faut donc trouver une solution pour pouvoir retrouver tes éléments dessiné dans la PictureBox.

Voici la solution qui me vient à l'esprit:
Chaque élément graphique dessiné doit être sauvegardé dans une liste (les couches) comme ça se fait dans des programmes graphique comme PhotoShop ou Paint.NET. Il faut donc sauvegarder toutes les propriétés utiles pour pouvoir reconstituer l'élément graphique (par exemple Bounds et Color pour un rectangle opaque).

Lorsque tu fais un clique sur ta PictureBox, suffit de retrouver ton élément dans ta liste, de modifier sa position et de redessiner le tout.
0
68manu Messages postés 43 Date d'inscription samedi 20 septembre 2008 Statut Membre Dernière intervention 1 octobre 2008
27 sept. 2008 à 01:06
Bien vu Kevin,
Desole drenalyn,


j'ai pas percute que c'etait le dessin...et pas la picturebox.


A+

_____________________
No problems, only soluces
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drenalyn51 Messages postés 3 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 28 septembre 2008
27 sept. 2008 à 13:43
Salut Kévin,


Je vais éssayer de faire ce que tu dis,mais ca va etre très difficile car je suis total débutant!


Au cas où , si tu avais quelque bout de code pour m'aider?


Merci quand même à toi 68manu pour ta réponse!


 
0
Rejoignez-nous