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 { }
}
}
}
}
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.