IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

VB 2010 Création de bouton dynamique et qui se deplace


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    Points : 48
    Points
    48
    Par défaut VB 2010 Création de bouton dynamique et qui se deplace
    Bonjour;
    Je souhaite créer des bouttons dynamiquement et qui peuvent se déplacer avec la souris.
    voici le code ci-dessous qui fonctionne avec :
    AddHandler m_TextBoxes(i).MouseHover, AddressOf mouvementqui relie mon action à la procédure "mouvement" qui doit laisser libre le déplacement des bouttons.... c'est cette procédure que je n'arrive pas à la créer.
    Merci de votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim nom_action As String
            nom_action = InputBox("Nom de l'action", "Sport Action")
     
            ' Get the index for the new control.
            Dim i As Integer = m_TextBoxes.Length
     
            ' Make room.
            ReDim Preserve m_TextBoxes(i)
     
            ' Create and initialize the control.
            m_TextBoxes(i) = New Button
            With m_TextBoxes(i)
                .Name = "TextBox" & i.ToString() + 1
     
                If m_TextBoxes.Length < 2 Then
                    ' Position the first one.
                    .SetBounds(8, 8, 100, 20)
                Else
                    ' Position subsequent controls.
                    .Left = m_TextBoxes(i - 1).Left
                    .Top = m_TextBoxes(i - 1).Top + m_TextBoxes(i - _
                        1).Height + 4
                    .Size = m_TextBoxes(i - 1).Size
                End If
     
                ' Save the control's index in the Tag property.
                ' (Or you can get this from the Name.)
                m_TextBoxes(i).Tag = i.ToString
                '.Tag = i
            End With
     
            ' Give the control an event handler.
     
            AddHandler m_TextBoxes(i).MouseHover, AddressOf mouvement
     
           ' Add the control to the form.
            Me.Controls.Add(m_TextBoxes(i))
            m_TextBoxes(i).Text = nom_action
     
        End Sub

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Je souahite crée des bouttons dynamiquement et qui peuvent se déplacer avec la souris.
    Pour un déplacement dans le même container (Form, Panel, TabPage, ...), on peut le faire "à la main" en gérant les events Click, MouseDown, MouseMove et MouseUp:

    • L'event Click étant potentiellement en conflit avec les autres events, on ne l'utilisera pas.
    • L'event MouseDown servira à entrer dans un mode "déplacement de bouton" et à noter la position relative P du curseur dans le bouton.
    • L'event MouseMove servira à déterminer la nouvelle position Q du curseur dans le bouton. Si on est en un mode "déplacement de bouton", on déplacera alors le bouton, en modifiant sa propriété Location de Q-P et on fera P=Q pour le move suivant.
    • L'event MouseUp servira à exécuter ce qu'on faisait sur le click, à condition qu'il n'y ait eu aucun MouseMove. Dans tous les cas, remettre le mode "déplacement de bouton à false.


    Penser aussi dans le MouseMove à limiter le déplacement de bouton pour éviter qu'il "sorte" de l'espace visible.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    Points : 48
    Points
    48
    Par défaut
    Merci pour votre retour...
    Tout d'adord;je vous informe que je developpe avec VB express 2010.
    je ne sais toujours pas comment faire..).
    En faite je crée des boutons dynamiquement avec le code ci-dessous; mais je ne sais pas rendre mes bouttons m_TextBoxes(i) libre pour se deplacer en les faisons glisser avec la souris.
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim nom_action As String
            nom_action = InputBox("Nom de l'action", "Sport Action")
     
            ' Get the index for the new control.
            Dim i As Integer = m_TextBoxes.Length
     
            ' Make room.
            ReDim Preserve m_TextBoxes(i)
     
            ' Create and initialize the control.
            m_TextBoxes(i) = New Button
            With m_TextBoxes(i)
                .Name = "TextBox" & i.ToString() + 1
     
                If m_TextBoxes.Length < 2 Then
                    ' Position the first one.
                    .SetBounds(8, 8, 100, 20)
                Else
                    ' Position subsequent controls.
                    .Left = m_TextBoxes(i - 1).Left
                    .Top = m_TextBoxes(i - 1).Top + m_TextBoxes(i - _
                        1).Height + 4
                    .Size = m_TextBoxes(i - 1).Size
                End If
     
                ' Save the control's index in the Tag property.
                ' (Or you can get this from the Name.)
                m_TextBoxes(i).Tag = i.ToString
                '.Tag = i
            End With
     
            ' Give the control an event handler.
            AddHandler m_TextBoxes(i).Click, AddressOf TextBox_TextChanged
     
            'AddHandler m_TextBoxes(i).MouseHover, AddressOf mouvement
     
            ' Add the control to the form.
            Me.Controls.Add(m_TextBoxes(i))
            m_TextBoxes(i).Text = nom_action
     
        End Sub


    Citation Envoyé par Graffito Voir le message
    Regarde cette solution : http://stackoverflow.com/questions/1...-another-panel

    Sinon, pour un déplacement dans le même container (Form, Panel, TabPage, ...), on peut le faire "à la main" en gérant les events Click, MouseDown, MouseMove et MouseUp:

    • L'event Click étant potentiellement en conflit avec les autres events, on ne l'utilisera pas.
    • L'event MouseDown servira à entrer dans un mode "déplacement de bouton" et à noter la position relative P du curseur dans le bouton.
    • L'event MouseMove servira à déterminer la nouvelle position Q du curseur dans le bouton. Si on est en un mode "déplacement de bouton", on déplacera alors le bouton, en modifiant sa propriété Location de Q-P et on fera P=Q pour le move suivant.
    • L'event MouseUp servira à exécuter ce qu'on faisait sur le click, à condition qu'il n'y ait eu aucun MouseMove. Dans tous les cas, remettre le mode "déplacement de bouton à false.


    Penser aussi dans le MouseMove à limiter le déplacement de bouton pour éviter qu'il "sorte" de l'espace visible.

  4. #4
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Salut à toi !

    Si ça peut t'aider,j'ai eu un truc similaire à faire avec une form !

    C'est la même chose en gros.

    Voila le code :

    on enregistre les coordonnées de la souris lors d'un clic (mousedown)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Recherche_d_article_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
          mouse_offset = New Point(e.X, e.Y)
    End Sub
    et ensuite on déplace le controle (ma form pour moi) à l'endroit où la souris ce situe - le point initial à l'aide du mousemove :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Recherche_d_article_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
     
            If e.Button = Windows.Forms.MouseButtons.Left Then
                mousePos.Offset(e.X - mouse_offset.X, e.Y - mouse_offset.Y)
                Me.Location = mousePos
            End If
     
    End Sub
    sans oublier de déclarer les Points :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim mousePos As Point = Control.MousePosition
    Dim mouse_offset As Point
    Voila j'espère que tu t'en sortira ! Ça devrait aller

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Une astuce pour déplacer un Control avec la souris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    public static extern bool ReleaseCapture();
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
     
    private int WM_SYSCOMMAND = 0x0112;
    private IntPtr SC_DRAGMOVE = new IntPtr(0xF012);
    private IntPtr PtrNull = new IntPtr(0);
     
    private void MyButton_MouseDown(object sender, MouseEventArgs e)
    {           
          ReleaseCapture();
          SendMessage(MyButton.Handle, WM_SYSCOMMAND, SC_DRAGMOVE, PtrNull);
    }

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    @ebastien : très intéressant, je ne connaissais pas.
    Merci

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    Points : 48
    Points
    48
    Par défaut
    Merci pour vos retours..
    J'ai deja essayé le même code (ou présque) que celui proposé par @ebastien...ca marche bien qaund j'avais des bouttons statiques (voir le code ci-dessous) mais mon probleme: comme c'est une création de boutton dynamique je ne sais pas comment mentionner le nom des bouttons à la place de "Bouttons1". voir mon code pour la création des bouttons dynamique dans mon 1er message. Merci encore de votre aide.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Boutton1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles boutton1.MouseMove
            Dim lHwnd As Int32
            lHwnd = boutton1.Handle
            If lHwnd = 0 Then Exit Sub
            ReleaseCapture()
            SendMessage(lHwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
        End Sub

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    On peut affecter à tous les boutons une procédure unique "Bouttons_MouseMove" de gestion d'event.
    On peut récupérer le Bouton ayant déclenché l'event en "castant" l'objet sender sur un type Button, ce qui permettra d'utiliser toutes les propriétés du Bouton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim btn As Button = DirectCast(sender, Button)
    btn.Text=btn.Text & "." // Dans cet exemple, on ajoute un point dans le text du bouton à chaque move.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    Points : 48
    Points
    48
    Par défaut
    désolé mais je ne maitrise pas tres bien cette partie. je m'explique..
    Ma fonction ci-dessous Boutton1_MouseMove fonctionne bien ( fait bouger mon boutton1) quand le le boutton1 est crée manuellement. Mais maintenant j'utilise une création dynamqie des bouttons et c'est la ou je n'arrive pas à remplacer le nom de boutton1 par le nom du boutton selectionné.
    Merci

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Dans la création de bouton, tu devrais avoir des instructions comme celles-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AddHandler Boutton1.MouseMove, AddressOf Bouttons_MouseMove
    AddHandler Boutton2.MouseMove, AddressOf Bouttons_MouseMove
    ...
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Salut !

    Dans ta partie : "AddHandler m_TextBoxes(i).MouseHover, AddressOf mouvement", ta procédure mouvement doit être du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private sub mouvement (sender as object, e as eventargs)
    sender est ton bouton. Il te faut le caster comme fait graffito ! ensuite tu fais ce que tu veux avec le sender.

    Personnellement, je créé un autre bouton factice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim IMG_Bouton as Button
    et dans la procédure mouvement je mets :

    ensuite j'utilise mon IMG_Bouton comme un bouton normal !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    Points : 48
    Points
    48
    Par défaut
    Merci pour ce retour...

    j'ai crée ma procédure: mouvement ( code ci-dessous) qui est rappelé lors de ma création des bouttons avec ma Privater SUB Button1_Click mais j'ai une erreur dés que je souhaite faire bouger
    le boutton crée: ""Impossible d'effectuer un cast d'un objet de type 'System.EventArgs' en type 'System.Windows.Forms.MouseEventArgs".
    je pense que l'erreur vient du type MouseEventArgs, mais si je mets le même type que la Privater SUB Button1_Click c'est à dire System.EventArgs je n'ai plus d'erreur mais le boutton ne bouge pas.
    Merci et désolé encore... je susi vraiment bloqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub mouvement(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            Dim lHwnd As Button = DirectCast(sender, Button)
            'lHwnd = m_TextBoxes(DirectCast(sender, Button).Tag.ToString).Handle
            'If lHwnd = 0 Then Exit Sub
            ReleaseCapture()
            SendMessage(lHwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
     
        End Sub

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Affecte ta procédure à l'évènement MouseDown plutôt que MouseClick, ça devrait fonctionner.

  14. #14
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    j'ai testé ce code il fonctionne très bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Public Class Form1
        Dim Bouton As New List(Of Button)
        Dim IMG_Bouton As Button
        Dim mousePos As Point = Control.MousePosition
        Dim mouse_offset As Point
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Bouton.Add(New Button) 'Ajoute un bouton à la liste.
            Bouton(Bouton.Count - 1).Text = "OK" 'Ajoute le texte OK au bouton ajouté.
     
            Me.Controls.Add(Bouton(Bouton.Count - 1)) 'Ajoute le bouton dans la form.
     
            AddHandler Bouton(Bouton.Count - 1).MouseMove, AddressOf mouvement
            AddHandler Bouton(Bouton.Count - 1).MouseDown, AddressOf clic
     
        End Sub
     
        Private Sub mouvement(sender As Object, e As MouseEventArgs)
     
            IMG_Bouton = sender
     
            If e.Button = Windows.Forms.MouseButtons.Left Then 'si on clic droit
                mousePos.Offset(e.X - mouse_offset.X, e.Y - mouse_offset.Y)
                IMG_Bouton.Location = mousePos 'nouvelle position du bouton
            End If
     
        End Sub
     
        Private Sub clic(sender As Object, e As MouseEventArgs)
            mouse_offset = New Point(e.X, e.Y) 'position du curseur sur le bouton
        End Sub
     
    End Class
    voila tu devrais avoir tout maintenant pour y arriver

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    Points : 48
    Points
    48
    Par défaut
    Oui effectivement ton code fonctionne bien, mais ma problematique est que la création des bouttons ne se fait pas à la Load de la Form mais quand on clik sur le button1 ...:desole j'en peux plus...)))

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim nom_action As String
            nom_action = InputBox("Nom de l'action", "Sport Action")
     
            ' Get the index for the new control.
            Dim i As Integer = m_TextBoxes.Length
     
            ' Make room.
            ReDim Preserve m_TextBoxes(i)
     
            ' Create and initialize the control.
            m_TextBoxes(i) = New Button
            With m_TextBoxes(i)
                .Name = "TextBox" & i.ToString() + 1
     
                If m_TextBoxes.Length < 2 Then
                    ' Position the first one.
                    .SetBounds(8, 8, 100, 20)
                Else
                    ' Position subsequent controls.
                    .Left = m_TextBoxes(i - 1).Left
                    .Top = m_TextBoxes(i - 1).Top + m_TextBoxes(i - _
                        1).Height + 4
                    .Size = m_TextBoxes(i - 1).Size
                End If
     
                ' Save the control's index in the Tag property.
                ' (Or you can get this from the Name.)
                m_TextBoxes(i).Tag = i.ToString
                '.Tag = i
            End With
     
            ' Give the control an event handler.
            AddHandler m_TextBoxes(i).Click, AddressOf TextBox_TextChanged
     
            AddHandler m_TextBoxes(i).MouseHover, AddressOf mouvement
     
            ' Add the control to the form.
            Me.Controls.Add(m_TextBoxes(i))
            m_TextBoxes(i).Text = nom_action
     
        End Sub

  16. #16
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Si je comprends bien :

    tu as un bouton Button1 qui lui est présent dans ta form ?

    Lorsque tu cliques sur ce bouton, tu veux créer un nouveau bouton (en laissant ton bouton 1 à sa place ?), ce nouveau bouton tu veux pouvoir le placer ou tu le désires avec le texte que tu auras entré préalablement ?

    J'avoue pas trop bien comprendre ce que tu veux faire si c'est pas ça :s

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    Points : 48
    Points
    48
    Par défaut
    desole pour le retard.. oui c'est ca...

  18. #18
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Si tu fais ca ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim Bouton As New List(Of Button)
        Dim IMG_Bouton As Button
        Dim mousePos As Point = Control.MousePosition
        Dim mouse_offset As Point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
        Bouton.Add(New Button) 'Ajoute un bouton à la liste.
        AddHandler Bouton(Bouton.Count - 1).MouseMove, AddressOf mouvement
        AddHandler Bouton(Bouton.Count - 1).MouseDown, AddressOf clic
        AddHandler Bouton(Bouton.Count - 1).MouseUp, AddressOf Lache
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      Private Sub mouvement(sender As Object, e As MouseEventArgs)
     
            IMG_Bouton = sender
     
            If e.Button = Windows.Forms.MouseButtons.Left Then 'si on clic droit
                mousePos.Offset(e.X - mouse_offset.X, e.Y - mouse_offset.Y)
                IMG_Bouton.Location = mousePos 'nouvelle position du bouton
            End If
     
        End Sub
     
        Private Sub clic(sender As Object, e As MouseEventArgs)
     
            Me.Controls.add(Bouton(Bouton.Count - 1))
            mouse_offset = New Point(e.X, e.Y) 'position du curseur sur le bouton
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Lache (sender as Object, e as MouseEventArgs)
       IMG_Bouton = sender
       IMG_Bouton.Text = InputBox("Nom de l'action", "Sport Action")
    End Sub
    Ca fonctionne pas ?

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    Points : 48
    Points
    48
    Par défaut
    Merci apres quelques petits ajustement ca marche...mais je n'arrive pas à recuperer le texte et l'index de chaque boutton quand je clique dessus.en faite il garde tj en memoire la ref du dernier boutton cliqué..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Public Class Form1
     
        Dim Bouton As New List(Of Button)
        Dim IMG_Bouton As Button
        Dim mousePos As Point = Control.MousePosition
        Dim mouse_offset As Point
        Dim nomaction As String
     
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            nomaction = InputBox("Nom de l'action", "Sport Action")
     
            Bouton.Add(New Button) 'Ajoute un bouton à la liste.
     
            Me.Controls.Add(Bouton(Bouton.Count - 1))
     
            Bouton(Bouton.Count - 1).Text = nomaction
     
     
            AddHandler Bouton(Bouton.Count - 1).MouseMove, AddressOf mouvement
            AddHandler Bouton(Bouton.Count - 1).MouseDown, AddressOf clic
            'AddHandler Bouton(Bouton.Count - 1).MouseUp, AddressOf Lache
     
     
        End Sub
     
     
        Private Sub mouvement(ByVal sender As Object, ByVal e As MouseEventArgs)
     
            IMG_Bouton = sender
     
            If e.Button = Windows.Forms.MouseButtons.Left Then 'si on clic droit
                mousePos.Offset(e.X - mouse_offset.X, e.Y - mouse_offset.Y)
                IMG_Bouton.Location = mousePos 'nouvelle position du bouton
            End If
     
        End Sub
     
        Private Sub clic(ByVal sender As Object, ByVal e As MouseEventArgs)
     
            'Me.Controls.add(Bouton(Bouton.Count - 1))
            mouse_offset = New Point(e.X, e.Y) 'position du curseur sur le bouton
     
            TextBox1.Text = Bouton(Bouton.Count - 1).Text
     
        End Sub
     
        'Private Sub Lache(ByVal sender As Object, ByVal e As MouseEventArgs)
        '    IMG_Bouton = sender
        '    'IMG_Bouton.Text = InputBox("Nom de l'action", "Sport Action")
        'End Sub
     
    End Class

  20. #20
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub clic(ByVal sender As Object, ByVal e As MouseEventArgs)
     
            'Me.Controls.add(Bouton(Bouton.Count - 1))
            mouse_offset = New Point(e.X, e.Y) 'position du curseur sur le bouton
     
            TextBox1.Text = Bouton(Bouton.Count - 1).Text
     
        End Sub
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub clic(ByVal sender As Object, ByVal e As MouseEventArgs)
     
        'Me.Controls.add(Bouton(Bouton.Count - 1))
        mouse_offset = New Point(e.X, e.Y) 'position du curseur sur le bouton
     
        TextBox1.Text = sender.Text
     
    End Sub
    normalement il te faudrait réutiliser IMG_Bouton = sender pour faire bien au début de ta procédure clic !

    Et ça devrait fonctionner !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/05/2014, 18h14
  2. Création de boutons dynamiquement
    Par Titi41 dans le forum ASP.NET
    Réponses: 6
    Dernier message: 23/06/2008, 14h21
  3. Réponses: 9
    Dernier message: 27/05/2008, 11h42
  4. Réponses: 2
    Dernier message: 10/01/2008, 14h13
  5. Réponses: 8
    Dernier message: 22/06/2007, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo