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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    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 confirmé 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
    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.

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

    Informations forums :
    Inscription : Janvier 2013
    Messages : 136
    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 confirmé
    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
    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 Expert
    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
    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
    Membre Expert
    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
    Billets dans le blog
    7
    Par défaut
    @ebastien : très intéressant, je ne connaissais pas.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

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