Utiliser la souris pour scroller mon flowlayoutpanel

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

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.