none
Comment faire pour qu'un contrôle suive la souris ? RRS feed

Réponses

  • Bonjour,

    Vous voulez-faire un tooltip ? Le composant ToolTip ne vous convient pas ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse natinusala lundi 5 juillet 2010 09:45
    dimanche 4 juillet 2010 21:14
    Modérateur
  • Bonjour,

    Cursor.Current = New Cursor("<Fichier cur>")

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse natinusala lundi 5 juillet 2010 14:07
    lundi 5 juillet 2010 12:44
    Modérateur
  • Bonjour,

    Il faut définir la propriété Cursor de la fenêtre et non le curseur courant.

    Me.Cursor = New Cursor("C:\Windows\Cursors\3dgnesw.cur")

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse natinusala mercredi 7 juillet 2010 10:54
    mardi 6 juillet 2010 19:18
    Modérateur
  • Bonjour,

    La classe Cursor ne gère pas les curseur animé et les curseurs en couleur (http://msdn.microsoft.com/fr-fr/library/system.windows.forms.cursor.aspx). Extrait de la la documentation :

    La classe Cursor ne prend pas en charge les curseurs animés (fichiers .ani), ni les curseurs dotés de couleurs autres que le noir et le blanc.

    Cependant vous pouvez charger un curseur en couleur en utilisant l'API LoadCursorFromFile().

    <DllImport("user32.dll")> _
    Private Shared Function LoadCursorFromFile(ByVal lpFileName As String) As IntPtr
    End Function
    
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
      Me.Cursor = New Cursor(Form1.LoadCursorFromFile("<Votre curseur en couleur >"))
    End Sub
    

     

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 14 juillet 2010 13:45
    Modérateur

Toutes les réponses

  • Bonjour,
    Voici un petit exemple selon le principe de vb6 (s'il peut t'être utile), mais il est imparfait, je ne connais pas assez vbNet pour résoudre totalement le problème, alors ça se déplace mais c'est plein de parasites (et CLS est inopérant), d'autres vont sans doute compléter ce code, ou utiliser d'autres méthodes, désolé, voici :

    Option Explicit On
    Class form1
     Dim mouse_down As Boolean = False
     Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
      mouse_down = True
     End Sub
    
     Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
      If mouse_down = False Then Exit Sub
      PictureBox1.Left = e.X
      PictureBox1.Top = e.Y
     End Sub
    
     Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
      mouse_down = False
     End Sub
    End Class

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    samedi 3 juillet 2010 17:06
  • Bonjour,

    Public Class Form1
    
      ' Delta entre le contrôle et la souris
      Private delta As Nullable(Of Point)
    
      Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        Me.delta = Me.PointToClient(Control.MousePosition) - Me.PictureBox1.Location
      End Sub
    
      Private Sub PictureBox1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        Me.delta = Nothing
      End Sub
    
      Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If Not Me.delta Is Nothing Then
          Me.PictureBox1.Location = Me.PointToClient(Control.MousePosition) - Me.delta.Value
        End If
      End Sub
    End Class

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    samedi 3 juillet 2010 17:16
    Modérateur
  • Merci pour le partage, mais le contrôle suit la souris uniquement si on clique dessus. Or, j'aimerai qu'il la suive tout le temps, sans avoir besoin de cliquer dessus.
    samedi 3 juillet 2010 17:59
  • Bonjour,

    Pouvez-vous être plus explicit ? Quand le PictureBox doit suivre la souris (dès que la souris est sur la fenêtre ?).

    Le plus simple : Souhaitez vous modifier le curseur de la souris ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    samedi 3 juillet 2010 19:27
    Modérateur
  • Bonjour Gilles,

    Excellent, je viens de tester, ça vaut une sixième médaille ;o)

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    dimanche 4 juillet 2010 08:48
  • Oui, je voudrais changer le curseur de la souris, mais séparément...

    Le problème de la PictureBox est que j'aimerai que le coin haut gauche de l'objet suive le curseur de la souris, comme une frame. C'est pour faire un fait une description qui s'affiche au survol d'un bouton. L'image s'affiche, mais il faudrait qu'elle suive la souris.

    Merci !

    dimanche 4 juillet 2010 09:12
  • Bonjour,

    Vous voulez-faire un tooltip ? Le composant ToolTip ne vous convient pas ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse natinusala lundi 5 juillet 2010 09:45
    dimanche 4 juillet 2010 21:14
    Modérateur
  • Oui ! Voila ! Le ToolTip c'est parfait merci !

    Et pour changer le curseur de la souris ? Parceque dans les propriétés de la Form on ne peut pas mettre un curseur personnalisé...

    lundi 5 juillet 2010 09:46
  • Bonjour,

    Utilisez la classe Cursor :

    Cursor.Current = Cursors.Hand

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse natinusala lundi 5 juillet 2010 14:07
    • Non marqué comme réponse natinusala lundi 5 juillet 2010 14:07
    lundi 5 juillet 2010 10:13
    Modérateur
  • Oui, mais comment importer un .cur et le mettre dans la Form ?
    lundi 5 juillet 2010 11:59
  • Bonjour,

    Cursor.Current = New Cursor("<Fichier cur>")

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse natinusala lundi 5 juillet 2010 14:07
    lundi 5 juillet 2010 12:44
    Modérateur
  • Oui, le curseur d'affiche mais au bout d'une demi seconde il s'enlève et remet le curseur de Windows...
    lundi 5 juillet 2010 14:11
  • Bonjour,

    Sur quel événement changez vous le curseur de la souris ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mardi 6 juillet 2010 08:51
    Modérateur
  • Bonjour,

    Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
      Me.delta = Me.PointToClient(Control.MousePosition) - Me.PictureBox1.Location
      Cursor.Current = New Cursor("C:\Windows\Cursors\3dgnesw.cur")
     End Sub
    Cordialement.
    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 6 juillet 2010 09:32
  • Je voudrais le placer sur toute la Form. Quand on passe la souris sur la Form, et bien le curseur change en My.Resources.cursor (qui est un .cur)
    mardi 6 juillet 2010 10:57
  • Bonjour bis,

    Et bien dans ce cas tu as la propriété "cursor" de ta forme, suffit de lui filer le curseur que tu veux...

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 6 juillet 2010 14:03
  • Oui, mais encore le même problème : il ne me propose nulle part d'importer un .cur externe...
    mardi 6 juillet 2010 15:09
  • Bonjour,

    Définissez dans ce cas la propriété par programmation :

    Me.Cursor = new Cursor("< Chemin de votre icône >")

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mardi 6 juillet 2010 15:21
    Modérateur
  • Oui, le curseur d'affiche mais au bout d'une demi seconde il s'enlève et remet le curseur de Windows...
    mardi 6 juillet 2010 16:30
  • Bonjour 3,

    C'est étrange ça, a priori l'évènement "showN" remplace en gros "Avtivate" de vb6, et pourtant le nouveau curseur n'est pas pris en compte, pas davantage que dans le "Load" ou le "Paint" ???

    Sub form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
      Cursor.Current = New Cursor("C:\Windows\Cursors\3dgnesw.cur")
     End Sub

    Faudrait trouver un évènement qui impose ce nouveau curseur... = "?"

    Cordialement


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 6 juillet 2010 17:13
  • Bonjour,

    Il faut définir la propriété Cursor de la fenêtre et non le curseur courant.

    Me.Cursor = New Cursor("C:\Windows\Cursors\3dgnesw.cur")

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse natinusala mercredi 7 juillet 2010 10:54
    mardi 6 juillet 2010 19:18
    Modérateur
  • Et bien oui merci ça marche, seul problème (encore un) c'est que le curseur affiché est tout noir. Les contours s'affichent, mais à l'intérieur c'est tout noir...
    mercredi 7 juillet 2010 11:06
  • Bonjour,

    Oui, je viens de faire un curseur 16 couleurs avec imageEditor, et ben il se transforme en bicolore sur la feuille ?

     Sub form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
     Me.Cursor = New Cursor("C:\Windows\Cursors\couleur.cur")
     End Sub
    

    C'est une histoire sans fin ;o)

    Cordialement.

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mercredi 7 juillet 2010 17:55
  • Bonjour,

    Pouvez-vous m'envoyer vos fichiers curseur qui pose problème sur gilles.tourreau@pos.fr ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 7 juillet 2010 20:37
    Modérateur
  • Mail envoyé :D
    jeudi 8 juillet 2010 18:33
  • Bonjour,

    La classe Cursor ne gère pas les curseur animé et les curseurs en couleur (http://msdn.microsoft.com/fr-fr/library/system.windows.forms.cursor.aspx). Extrait de la la documentation :

    La classe Cursor ne prend pas en charge les curseurs animés (fichiers .ani), ni les curseurs dotés de couleurs autres que le noir et le blanc.

    Cependant vous pouvez charger un curseur en couleur en utilisant l'API LoadCursorFromFile().

    <DllImport("user32.dll")> _
    Private Shared Function LoadCursorFromFile(ByVal lpFileName As String) As IntPtr
    End Function
    
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
      Me.Cursor = New Cursor(Form1.LoadCursorFromFile("<Votre curseur en couleur >"))
    End Sub
    

     

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 14 juillet 2010 13:45
    Modérateur