none
Peut-on savoir parmi plusieurs PictureBox lequel à été cliqué? RRS feed

  • Question

  • Sur le tableau de bord que je construis j'ai plusieurs PictureBox j'aimerais savoir lequel à été cliqué, est-ce possible?

    Je sais que je pourrais faire un sub pour chacun, mais j'en ai beaucoup vraiment beaucoup et  j'aimerais quelque chose de plus élégant....

     

    Autre chose: quelqu'un connait  l'existence d'un bon tutoriel ( ou bien une bonne source de référence) sur les fonctions de la sourie?

    drag & drop ces chose là....

    Merci à l'avance!

    dimanche 23 janvier 2011 11:27

Réponses

  • Bonjour,

    Il suffit d'associer le même événement Click pour chacun des PictureBox. Ensuite vous pouvez récupérer le PictureBox cliqué via se code dans l'événement Click :

      Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        Dim pb As PictureBox
    
        pb = CType(sender, PictureBox)
    
        pb.Image = ...
      End Sub
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Proposé comme réponse TroxsaEditor dimanche 23 janvier 2011 23:01
    • Marqué comme réponse Alex Petrescu vendredi 28 janvier 2011 12:26
    dimanche 23 janvier 2011 13:48
    Modérateur

Toutes les réponses

  • Bonjour,

    Il suffit d'associer le même événement Click pour chacun des PictureBox. Ensuite vous pouvez récupérer le PictureBox cliqué via se code dans l'événement Click :

      Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        Dim pb As PictureBox
    
        pb = CType(sender, PictureBox)
    
        pb.Image = ...
      End Sub
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Proposé comme réponse TroxsaEditor dimanche 23 janvier 2011 23:01
    • Marqué comme réponse Alex Petrescu vendredi 28 janvier 2011 12:26
    dimanche 23 janvier 2011 13:48
    Modérateur
  • Bonjour Monocle 2,

    Tes pictures sont-elles indexées "p(i)", ou individuelles p1, p2 ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    dimanche 23 janvier 2011 14:07
  • EhJoe,

    Non elles ne sont pas indexés.

    dimanche 23 janvier 2011 14:34
  • Bonjour bis monocle2,

    Ben tu gagnerais à indexer tes images, c'est autrement facile, sinon tu vas devoir, comme Gille l'indique, mettre chacun des tests dans chacune des procédures de picture, ah ...

    Si tu veux un exemple d'indexation, n'hésite pas à demander ... et par curiosité, tu as combien de pictureBox ?

    Et pour le tutoriel, mois j'aime bien "Philippe Laserre" en français et en pdf, tape ça sur Gogole (c'est sur développez.com).

    Poiur l'exemple de drag and drop, voici l'exemple de mon pense-bête, espérant que ce sera suffisant, par contre on "devrait" pouvoir avoir l'image de ce que l'on déplace en bout de curseur, ça je ne sais pas, je n'en ai pas encore eu besoin :

    EVENEMENTS 
    mouseMove
    Sub objet1_MouseMove(..e ...)
     largeur = e.X
     hauteur = e.Y
    
    
    mouseDown mouseUp
    Dim b As Long
     If e.Button = Windows.Forms.MouseButtons.Left Then b = 1
     If e.Button = Windows.Forms.MouseButtons.Middle Then b = 4
     If e.Button = Windows.Forms.MouseButtons.Right Then b = 2
    
    
    mouseWheel wheel, curseur de souris
    Sub Form5_MouseWheel( ...
     Select Case e.Delta
     Case Is > 0 : My.Computer.Keyboard.SendKeys("{UP}", False)
     Case Is < 0 : My.Computer.Keyboard.SendKeys("{DOWN}", False)
     End Select
    
    
    Sub Form5_MouseEnter( ...
    ' le pointeur entre dans la zone de l'objet
     '
    Sub Form5_MouseEnter( ...
    ' le pointeur sort de la zone de l'objet
    
    
    
    ' DEPLACEMENT D'UN OBJET AVEC LA SOURIS 
    ' ET
    ' DRAG AND DROP
     '
    Public Class Form1
     Dim positionClick As Point
    
    Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
     If (e.Button = MouseButtons.Left) Then positionClick = e.Location
    End Sub
    
    Sub Button1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseMove
     If (e.Button <> MouseButtons.Left) Then Exit Sub
     Dim currentControl As Control
     currentControl = CType(sender, Control)
     currentControl.Location = New Point(currentControl.Location.X + e.X - positionClick.X, currentControl.Location.Y + e.Y - positionClick.Y)
    End Sub
    '
    '
    ' DRAG AND DROP DragAndDrop
    ' drag and drop entre 3 pictureBox
    ' 1 image (départ 1) avec 3 picturebox
    '
    Option Explicit On
    Public Class Form1
     Dim mouseIsDown As Boolean
     Dim senderBis As Object
     Dim positionClick As Point
    
     Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      Me.PictureBox1.AllowDrop = True
      Me.PictureBox2.AllowDrop = True
      Me.PictureBox3.AllowDrop = True
      PictureBox1.Image = My.Resources.J
      Me.Left = 50 : Me.Top = 50
     End Sub
    
     Sub Mouse_Down(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown, PictureBox2.MouseDown, PictureBox3.MouseDown
      If Not sender.Image Is Nothing Then mouseIsDown = True ' image présente
     End Sub
    
     Sub Mouse_Move(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove, PictureBox2.MouseMove, PictureBox3.MouseMove
      If mouseIsDown = True Then
       senderBis = sender ' nom objetc (sender)
       sender.DoDragDrop(sender.Image, DragDropEffects.Move) ' lancement
      End If
      mouseIsDown = False
     End Sub
    
     Sub Drag_Enter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox1.DragEnter, PictureBox2.DragEnter, PictureBox3.DragEnter
      If e.Data.GetDataPresent(DataFormats.Bitmap) Then
       e.Effect = DragDropEffects.Move
      Else
       e.Effect = DragDropEffects.None ' rejet non conforme
      End If
     End Sub
    
     Sub Drag_Drop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBox1.DragDrop, PictureBox2.DragDrop, PictureBox3.DragDrop
      senderBis.Image = Nothing ' vidange source
      sender.Image = e.Data.GetData(DataFormats.Bitmap) ' dép$ot cible
     End Sub
    End Class
    '
    '
    ' form sans bandeau déplacer
    Public Class Form4
     Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      DeplacementDeForm.RendreMobile(Me) ' appel de la classe
     End Sub
    End Class ' form4
    '
    Public Class DeplacementDeForm
     Public Shared Sub RendreMobile(ByVal frm As Form)
      Dim c As New DeplacementDeForm(frm, frm)
     End Sub
    
     Public Shared Sub RendreMobile(ByVal frm As Form, ByVal control As Control)
      Dim c As New DeplacementDeForm(frm, control)
     End Sub
    
    #Region "Variables privée"
     Private m_ClickPoint As Point
     Private m_Control As Control
     Private m_Frm As Form
    #End Region
    
    #Region "Création"
     Public Sub New(ByVal frm As Form, ByVal control As Control)
      m_Frm = frm
      m_Control = control
      AddHandler m_Control.MouseDown, AddressOf _MouseDown
      AddHandler m_Control.MouseMove, AddressOf _MouseMove
     End Sub
    #End Region
    
    #Region "Methodes"
     Sub _MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs)
      m_ClickPoint = New Point(e.X, e.Y)
     End Sub
    
     Sub _MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
      If (e.Button = MouseButtons.Left) Then
       Dim p As Point = m_Frm.Location
       m_Frm.Location = New Point(p.X - m_ClickPoint.X + e.X, p.Y - m_ClickPoint.Y + e.Y)
      End If
     End Sub
    #End Region
    End Class ' DeplacementDeForm
    
    

    Cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    dimanche 23 janvier 2011 15:26
  • Bonjour,

    Au passage, dans quel but avez vous besoin de récupérer le PictureBox qui a été cliqué ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    dimanche 23 janvier 2011 20:13
    Modérateur
  • Bonsoir,

    J'ai pensé à quelque chose qui rejoint ce que disait Gilles, du genre :

     

     Sub NouveauClic(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click, PictureBox3.Click, PictureBox2.Click
        MsgBox("La PictureBox cliquée est : " & CType(sender, PictureBox).Name)
      End Sub
    

    dimanche 23 janvier 2011 21:08