Evenement click sur polygone

Résolu
lololilizozo Messages postés 28 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 2 octobre 2012 - 12 sept. 2012 à 22:10
lololilizozo Messages postés 28 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 2 octobre 2012 - 13 sept. 2012 à 21:02
bonjour a tous,
j'ai une petite question :
y a t'il moyen de rendre un polygone "clickable" ?
en fait j'aimerais dessiner plusieurs polygones dans un picturebox et declencher un evenement quand je click a l'interieur d'un des polygone.
bonne soiree,
laurent.

5 réponses

Utilisateur anonyme
13 sept. 2012 à 19:20
Tu peux faire le test rapidement en changeant un peu le code ci-dessus en celui-là (bon ça met un peu plus de temps mais ca reste acceptable) :

Option Strict On
Public Class Form1
    Dim rd As New Random

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.WindowState = FormWindowState.Maximized
        '301 formes
        For x = 0 To 300
            'liste de points
            Dim pts As New List(Of Point)
            'ajout des points
            pts.Add(New Point(rd.Next(300), rd.Next(300)))
            pts.Add(New Point(rd.Next(300), rd.Next(300)))
            pts.Add(New Point(rd.Next(300), rd.Next(300)))
            pts.Add(New Point(rd.Next(300), rd.Next(300)))
            pts.Add(New Point(rd.Next(300), rd.Next(300)))
            pts.Add(New Point(rd.Next(300), rd.Next(300)))
            pts.Add(New Point(rd.Next(300), rd.Next(300)))
            pts.Add(New Point(rd.Next(300), rd.Next(300)))
            pts.Add(New Point(rd.Next(300), rd.Next(300)))

            'nouvelle instance de classe
            Dim pct As New clsPiece(pts, x.ToString)
            'paramètres
            With pct
                .BackColor = Color.FromArgb(rd.Next(255), rd.Next(255), rd.Next(255))
                .Location = New Point(rd.Next(1000), rd.Next(1000))
                .Size = New Size(300, 300)
            End With
            'événements
            AddHandler pct.MouseEnter, AddressOf pct_MouseEnter
            AddHandler pct.MouseLeave, AddressOf pct_MouseLeave
            AddHandler pct.Click, AddressOf pct_Click
            'ajout au formulaire
            Me.Controls.Add(pct)
        Next
    End Sub


    'événements picturebox
    Private Sub pct_Click(sender As Object, e As EventArgs)
        MessageBox.Show(DirectCast(sender, PictureBox).Name)
    End Sub

    Private Sub pct_MouseEnter(sender As Object, e As EventArgs)
        Cursor = Cursors.Hand
    End Sub

    Private Sub pct_MouseLeave(sender As Object, e As EventArgs)
        Cursor = Cursors.Default
    End Sub

End Class


Public Class clsPiece
    Inherits PictureBox

    Sub New(points As List(Of Point), Nom As String)
        Me.Name = Nom
        Dim _region(points.Count - 1) As Byte
        For x = 0 To points.Count - 1
            _region(x) = CType(Drawing2D.PathPointType.Line, Byte)
        Next
        'déclaration du graphic path
        Dim path As New Drawing2D.GraphicsPath(points.ToArray, _region)
        'régionage du picturebox
        Me.Region = New Region(path)
    End Sub

End Class
2
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
12 sept. 2012 à 23:05
Salut
et declencher un evenement quand je click


pas trop compris
le click c'est un évènement
l'évènement click du piucturebox est relevé quand on clique le picture box

explique ce que tu veux faire
tu peux conserver les left top de tes polygones
et savoir quand tu cliques le picturebox selon
la position de la souris dans quel polygon tu as cliqué
0
Utilisateur anonyme
13 sept. 2012 à 00:16
Bonsoir,

Voici une soklution; elle vaut ce qu'elle vaut.
Tu peux te servir du régionage d'un contrôle cliquable pour arriver à tes fins. Tout dépend du nombre de polygones que tu veux dessiner.
Voici une solution qui pourra peut-être t'aider :
Option Strict On
Public Class Form1

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'nouveau picturebox (on peut prendre n'importe quel controle cliquable)
        Dim pct As New PictureBox With {.BackColor Color.Red, .Size Me.ClientSize}
        'abonnement aux événements
        AddHandler pct.Click, AddressOf pct_Click
        AddHandler pct.MouseEnter, AddressOf pct_MouseEnter
        AddHandler pct.MouseLeave, AddressOf pct_MouseLeave
        'liste de points
        Dim pts As New List(Of Point)
        'ajout des points
        pts.Add(New Point(5, 100))
        pts.Add(New Point(50, 10))
        pts.Add(New Point(100, 10))
        pts.Add(New Point(200, 100))
        pts.Add(New Point(200, 180))
        pts.Add(New Point(100, 200))
        pts.Add(New Point(20, 100))
        'type de liaison ligne
        Dim _region(pts.Count - 1) As Byte
        For x = 0 To pts.Count - 1
            _region(x) = CType(Drawing2D.PathPointType.Line, Byte)
        Next
        'déclaration du graphic path
        Dim path As New Drawing2D.GraphicsPath(pts.ToArray, _region)
        'régionage du picturebox
        pct.Region = New Region(path)
        'ajout au formulaire
        Me.Controls.Add(pct)
    End Sub

    'événements picturebox
    Private Sub pct_Click(sender As Object, e As EventArgs)
        MessageBox.Show("ok")
    End Sub

    Private Sub pct_MouseEnter(sender As Object, e As EventArgs)
        Cursor = Cursors.Hand
    End Sub

    Private Sub pct_MouseLeave(sender As Object, e As EventArgs)
        Cursor = Cursors.Default
    End Sub
End Class

Tu peux abonner tous tes contrôles 'régionnés' sur les mêmes événements.
Et pour savoir lequel à été sélectionné par l'utilisateur, tu peux faire un cast (DirectCast) de l'objet sender.

Salut ShayW
0
lololilizozo Messages postés 28 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 2 octobre 2012
13 sept. 2012 à 16:05
bonjour et surtout merci beaucoup, c'est exactement ce que je voulais.
par contre est'il possible d'avoir beaucoup de "region" ?
dans mon cas je peux avoir 20 polygone comme je peux en avoir 300, c'est faisable avec cette methode?
en tout cas merci.
laurent.
0

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

Posez votre question
lololilizozo Messages postés 28 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 2 octobre 2012
13 sept. 2012 à 21:02
heuuu.... je crois que je t'aime !!!
ca c'est le top, j'ai plus qu'a l'adapter t c'est ok.
merci beaucoup.
laurent.
0
Rejoignez-nous