Drag & Drop

Résolu
Jleherpeur Messages postés 32 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 11 février 2010 - 5 juin 2008 à 11:25
Jleherpeur Messages postés 32 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 11 février 2010 - 5 juin 2008 à 11:30
Bonjour,
Je suis entrain de créer une class pour faire du Drag&Drop sur des Control.

J'ai un probleme ici: c.Parent.MousePosition
Comment faire pour recuperer cette valeur?

Sinon Le code marche très bien directement dans un formulaire.

Voici mon code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace dragdrop {
    class dragDrop {

        Control control;
        bool Dragging;
        int mouseX, mouseY;
        int clipLeft, clipTop, clipWidth, clipHeight;

        public dragDrop(Control c){
            this.control = c;
            c.MouseDown += new MouseEventHandler(c_MouseDown);
            c.MouseMove += new MouseEventHandler(c_MouseMove);
            c.MouseUp += new MouseEventHandler(c_MouseUp);
        }

        void c_MouseUp(object sender, MouseEventArgs e) {
            if (Dragging) {
                Dragging = false;
                Cursor.Clip = System.Drawing.Rectangle.Empty;
                control.Invalidate();
            }
        }

        void c_MouseMove(object sender, MouseEventArgs e) {
            Control c = (Control)sender;
            if (Dragging) {
                Point nextPosition = new Point();
                nextPosition = c.Parent.PointToClient(c.Parent.MousePosition);
                nextPosition.Offset(mouseX, mouseY);
                control.Location = nextPosition;
            }
        }

        void c_MouseDown(object sender, MouseEventArgs e) {
            Control c = (Control)sender;
            if (e.Button == MouseButtons.Left) {
                Dragging = true;
                mouseX = -e.X;
                mouseY = -e.Y;
                clipLeft = c.Parent.PointToClient(c.Parent.MousePosition).X - control.Location.X;
                clipTop = c.Parent.PointToClient(c.Parent.MousePosition).Y - control.Location.Y;
                clipWidth = c.Parent.ClientSize.Width - (control.Width - clipLeft);
                clipHeight = c.Parent.ClientSize.Height - (control.Height - clipTop);
                Cursor.Clip = c.Parent.RectangleToScreen(new Rectangle(clipLeft, clipTop, clipWidth, clipHeight));
                control.Invalidate();
            }
        }
   }
}

1 réponse

Jleherpeur Messages postés 32 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 11 février 2010
5 juin 2008 à 11:30
Désolé pour le dérangement, mais j'ai trouve ;)

Enfait j'ai remplacé
c.Parent par Form

A bientot
3
Rejoignez-nous