2010-03-14 6 views
2

Je veux savoir comment dessiner un rectangle en C# et le faire glisser et déposer dans la page ici mon code pour le dessiner mais je ne peux pas le faire glisser ou le déposer.Glissez et déposez le rectangle en C#

public partial class Form1 : Form 
{ 
    public bool drag = false; 
    int cur_x, cur_y; 
    Rectangle rec = new Rectangle(10, 10, 100, 100); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnPaint(PaintEventArgs r) 
    { 
     base.OnPaint(r); 
     Graphics g = r.Graphics; 
     //g.DrawRectangle(Pens.Black, rec); 
     g.FillRectangle(Brushes.Aquamarine, rec); 

    } 
    private void recmousedown(object sender, MouseEventArgs m) 
    { 
     if (m.Button != MouseButtons.Left) 
      return; 
     rec = new Rectangle(m.X, m.Y,100,100); 

     drag = true; 
     cur_x = m.X; 
     cur_y = m.Y; 
    } 

    private void recmousemove(object sender, MouseEventArgs m) 
    { 
     if (m.Button != MouseButtons.Left) 
      return; 

     rec.X = m.X; 
     rec.Y = m.Y; 
     Invalidate(); 
    } 
} 
+0

Je pense que vous devez en dire un peu plus sur ce que vous entendez par "glisser-déposer" ici: les techniques utilisant la peinture vont produire des rectangles uniques qui seront effacés lors du prochain MouseDown par l'appel de Invalidate. Cherchez-vous un rectangle, ou des rectangles qui "persisteront" sur l'écran? Que vous pouvez ensuite "sélectionner" et déplacer ou redimensionner? – BillW

+0

Si vous avez besoin de "formes", consultez cette question SO actuelle: http://stackoverflow.com/questions/2440912/visual-studio-adding-ovalshape-and-rectangleshape-tool-references-to-a-project – BillW

Répondre

6

Vous êtes assez proche, vous avez juste besoin d'initialiser le rectangle mieux et ajuster la taille du rectangle dans l'événement Move:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     this.DoubleBuffered = true; 
    } 
    Rectangle rec = new Rectangle(0, 0, 0, 0); 

    protected override void OnPaint(PaintEventArgs e) { 
     e.Graphics.FillRectangle(Brushes.Aquamarine, rec); 
    } 
    protected override void OnMouseDown(MouseEventArgs e) { 
     if (e.Button == MouseButtons.Left) { 
     rec = new Rectangle(e.X, e.Y, 0, 0); 
     Invalidate(); 
     } 
    } 
    protected override void OnMouseMove(MouseEventArgs e) { 
     if (e.Button == MouseButtons.Left) { 
     rec.Width = e.X - rec.X; 
     rec.Height = e.Y - rec.Y; 
     Invalidate(); 
     } 
    } 
    }