Evenement click sur polygone [Résolu]

Messages postés
28
Date d'inscription
jeudi 2 octobre 2008
Dernière intervention
2 octobre 2012
- - Dernière réponse : lololilizozo
Messages postés
28
Date d'inscription
jeudi 2 octobre 2008
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.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
2
Merci
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

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
0
Merci
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é
Commenter la réponse de cs_ShayW
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Messages postés
28
Date d'inscription
jeudi 2 octobre 2008
Dernière intervention
2 octobre 2012
0
Merci
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.
Commenter la réponse de lololilizozo
Messages postés
28
Date d'inscription
jeudi 2 octobre 2008
Dernière intervention
2 octobre 2012
0
Merci
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.
Commenter la réponse de lololilizozo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.