2012-02-09 11 views
-1

DragDropに問題があります。ドラッグコントロール間をドラッグ

private void Form0_Load(object sender, EventArgs e) 
    { 
     PictureBox panel1 = new PictureBox(); 
     PictureBox panel2 = new PictureBox(); 

     mainPanel.Dock = DockStyle.Fill; 
     this.Controls.Add(mainPanel); 

     panel1.Location = new Point(10, 10); 
     panel1.Size = new System.Drawing.Size(500, 300); 
     panel1.BorderStyle = BorderStyle.FixedSingle; 

     Button b2 = new Button(); 
     b2.Location = new Point(10, 10); 
     panel2.Controls.Add(b2); 
     panel2.Location = new Point(10, 10); 
     panel2.Size = new System.Drawing.Size(200, 100); 
     panel2.BorderStyle = BorderStyle.FixedSingle; 

     foreach (Control c in panel1.Controls) 
     { 
      c.MouseDown += new MouseEventHandler(control_MouseDown); 
      c.MouseMove += new MouseEventHandler(control_MouseMove); 
      c.MouseUp += new MouseEventHandler(control_MouseUp); 
      c.AllowDrop = true; 
     } 
     panel1.AllowDrop = true; 

     panel1.DragEnter += new DragEventHandler(container_DragEnter); 
     panel1.DragDrop += new DragEventHandler(container_DragDrop); 
     panel1.DragOver += new DragEventHandler(container_DragOver); 

     foreach (Control c in panel2.Controls) 
     { 
      c.MouseDown += new MouseEventHandler(control_MouseDown); 
      c.MouseMove += new MouseEventHandler(control_MouseMove); 
      c.MouseUp += new MouseEventHandler(control_MouseUp); 
      c.AllowDrop = true; 
     } 
     panel2.AllowDrop = true; 

     panel2.DragEnter += new DragEventHandler(container_DragEnter); 
     panel2.DragDrop += new DragEventHandler(container_DragDrop); 
     panel2.DragOver += new DragEventHandler(container_DragOver); 

     mainPanel.Controls.Add(panel1); 
     mainPanel.Controls.Add(panel2); 
     mainPanel.Controls.Add(pb); 
    } 

    private void control_MouseDown(object sender, MouseEventArgs e) 
    { 
     Control c = sender as Control; 
     isDragging = true; 
     clickOffsetX = e.X; 
     clickOffsetY = e.Y; 
    } 

    private void control_MouseMove(object sender, MouseEventArgs e) 
    { 
     Control c = sender as Control; 
     if (isDragging == true) 
     { 
      c.Left = e.X + c.Left - clickOffsetX; 
      c.Top = e.Y + c.Top - clickOffsetY; 
      if (c.Location.X + clickOffsetX > c.Parent.Width || 
       c.Location.Y + clickOffsetY > c.Parent.Height || 
       c.Location.X + clickOffsetX < 0 || 
       c.Location.Y + clickOffsetY < 0) 

       c.DoDragDrop(c, DragDropEffects.Move); 
     } 
    } 

    private void control_MouseUp(object sender, MouseEventArgs e) 
    { 
     isDragging = false; 
    } 

    void container_DragOver(object sender, DragEventArgs e) 
    { 
     e.Effect = DragDropEffects.Move; 
    } 

    private void container_DragEnter(object sender, DragEventArgs e) 
    { 
     //e.Effect = DragDropEffects.Move; 

     //if (e.Data.GetDataPresent(typeof(Bitmap))) 
     //{ 
     // e.Effect = DragDropEffects.Copy; 
     //} 
     //else 
     //{ 
     // e.Effect = DragDropEffects.None; 
     //} 
    } 

    private void container_DragDrop(object sender, DragEventArgs e) 
    { 
     Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control; 
     PictureBox p = sender as PictureBox; 
     mycontrol = c; 
     isDragging = false; 
     if (c != null) 
     { 
      c.Location = p.PointToClient(new Point(e.X, e.Y)); 
      p.Controls.Add(c); 
     } 
    } 

これは実用的な例です。しかし、私は親コントロールから子コントロールにドロップコントロールを行うことはできません。魔法とは何ですか?コントロールを別のコントロールにドロップする方法(私の例ではpanel1からpanel2へ)

+1

maがありませんgic。 –

+0

@justAuser:本当にやりたいことは?あなたは他のコントロールをドロップしたいと思うでしょうか?シナリオを解説してください。 – Smack

+0

@ Smack:質問はどうやって同じ親の別の子に子をドロップできますか? – justAuser

答えて

1

いくつかの答えはあなたを助けるかもしれない、ここではSOであります

このMove controls when Drag and drop on panel in C#

は、このフォームデザイナをホストする方法についての完全な例である参照:

Tailor Your Application by Building a Custom Forms Designer with .NET

単純なlableのドラッグドロップについてもこれをチェックしてください: Basic drag and drop in WinForms

+0

ありがとう!私は見るでしょう。 – justAuser

+0

これまで私はこれらの例を見てきました。それは結構です。しかし、私の場合に役立つ解決策はありません。質問は、どのように私は同じ親の別の子供に子供を移動することができますか? – justAuser

+0

あなたがドラッグしているコントロールIDを親から送り、それをドロップしているサブパネルに追加します。親でidを持つコントロールを見つけることができます。 –

関連する問題