Utiliser la souris pour scroller mon flowlayoutpanel

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 199 fois - Téléchargée 18 fois

Contenu du snippet

Bonjour,
Je n'ai trouvé aucune solution sur le net pour faire scroller simplement mon FlowLayoutPanel avec la souris, ou via mon touchscreen. Donc je m'y suis collé . C'est assez simple Il y a peux de commentaire mais ça marche bien.. Je n'ai pas mis en place d'inertie sur ce composant mais je peux aussi l'ajouter si besoin.

Source / Exemple :


using System;
using System.Drawing;
using System.Windows.Forms;
namespace Samson_For_Tablette
{
    public class myFlowLayoutPanel : FlowLayoutPanel
    {

        public myFlowLayoutPanel()
        :base()
        {
            this.MouseDown += new MouseEventHandler(_MouseDown);
            this.MouseMove += new MouseEventHandler(_MouseMove);
            this.MouseUp += new MouseEventHandler(_MouseUp);
        }
        // Memo de l'etat du bouton gauche de la souris
        private bool _ClickOk = false;
        // Memo de la position de la souris  du bouton gauche de la souris
        private int _MouseY = 0;
        private int _MouseX = 0;
        // ça c'est une petite astuce pour activer le composant et activer la roue de la souris 
        protected override void OnMouseEnter(EventArgs e)
        {
            base.OnMouseEnter(e);
            this.Focus(); 
        }
        
        //Recupéré les evenements souris des composants ajoutés sur le Panel
        protected override void OnControlAdded(ControlEventArgs e)
        {
            base.OnControlAdded(e);

                Control lControl = e.Control;
                lControl.MouseDown += new MouseEventHandler(_MouseDown);
                lControl.MouseMove += new MouseEventHandler(_MouseMove);
                lControl.MouseUp += new MouseEventHandler(_MouseUp);
            }

          
        }
       
        private void _MouseUp(object sender, MouseEventArgs e)
        {
            try
            {
                if (e.Button == System.Windows.Forms.MouseButtons.Left)
                    _ClickOk = false;
            }catch{}
        }
        private void _MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                if (_ClickOk)
                {
                    int lMouseX = MousePosition.X;
                    int lMouseY = MousePosition.Y;

                    int lDeltaX = lMouseX - _MouseX;
                    int lDeltaY = lMouseY - _MouseY;

                    _MouseX = lMouseX;
                    _MouseY = lMouseY;

                    Rectangle clientRectangle = base.ClientRectangle;
                    int lY = DisplayRectangle.Y;
                    int lX = DisplayRectangle.X;
                    if (!this.VScroll)
                        lDeltaY = 0;
                    if (!this.HScroll)
                        lDeltaX = 0;
                    try
                    {
                        this.SetDisplayRectLocation(lX + lDeltaX, lY + lDeltaY);
                    }
                    catch { }
                }
            }
            catch { }
        }
        private void _MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                try
                {
                    _ClickOk = true;
                    _MouseX = MousePosition.X;
                    _MouseY = MousePosition.Y;
                }
                catch { }
            }
        }
        
    }
}

A voir également

Ajouter un commentaire Commentaire
shenron666 Messages postés 229 Date d'inscription dimanche 14 septembre 2003 Statut Membre Dernière intervention 20 août 2014
4 mai 2013 à 23:29
Salut, tu pourrais expliquer ce que ta source fait ? "scroller" est un peu vague
De plus, pour que ta classe intéresse quelqu'un, je te conseillerai d'ajouter un programme exemple qui l'utilise

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.