2013-03-01 179 views
1

通过此代码,我可以将图像拖放到标签上,但现在我想将该图像从标签拖动到另一个标签。我怎样才能做到这一点?拖放图像

namespace WindowsFormsApplication1 
{ 
    public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
      Image img = Image.FromFile(@"D:\test\test.png"); 
      this.btnImage.Image = img; 

      Image img1 = Image.FromFile(@"C:\Documents and Settings\SAURABH\Desktop\Green.ico"); 
      this.btnImage1.Image = img1; 
     } 

     private void button1_MouseDown(object sender, MouseEventArgs e) 
     { 
      Button btnPic = (Button)sender; 
      btnPic.DoDragDrop(btnPic.Image, DragDropEffects.Copy); 
     } 

     private void button2_MouseDown(object sender, MouseEventArgs e) 
     { 
      Button btnPic = (Button)sender; 
      btnPic.DoDragDrop(btnPic.Image, DragDropEffects.Copy); 
     } 

     private void button3_MouseDown(object sender, MouseEventArgs e) 
     { 
      Button btnPic = (Button)sender; 
      btnPic.DoDragDrop(btnPic.Image, DragDropEffects.Copy); 
     } 

     private void label1_DragEnter(object sender, DragEventArgs e) 
     { 
      if (e.Data.GetDataPresent(DataFormats.Bitmap)) 
      { 
       e.Effect = DragDropEffects.Copy; 
      } 
      else 
      { 
       e.Effect = DragDropEffects.None; 
      } 
     } 

     private void label10_DragEnter(object sender, DragEventArgs e) 
     { 
      if (e.Data.GetDataPresent(DataFormats.Bitmap)) 
      { 
       e.Effect = DragDropEffects.Copy; 
      } 
      else 
      { 
       e.Effect = DragDropEffects.None; 
      } 
     } 

     private void label10_DragDrop(object sender, DragEventArgs e) 
     { 
      Label picbox = (Label)sender; 
      //PictureBox picbox = (PictureBox)sender; 
      Graphics g = picbox.CreateGraphics(); 
      g.DrawImage((Image)e.Data.GetData(DataFormats.Bitmap), new Point(0, 0)); 
     } 

     private void label1_DragDrop(object sender, DragEventArgs e) 
     { 
      Label picbox = (Label)sender; 
      //PictureBox picbox = (PictureBox)sender; 
      Graphics g = picbox.CreateGraphics(); 
      g.DrawImage((Image)e.Data.GetData(DataFormats.Bitmap), new Point(0, 0)); 
     } 
    } 
} 

回答

0

问题出在您的Label的DragDrop处理程序。您可以直接复制拖放代码为拖放操作的“有效载荷”是这样的:

private void Label_DragDrop(object sender, DragEventArgs e) { 
    if (e.Data.GetDataPresent(typeof(Bitmap))) { 
     ((Label)sender).Image = (Image)e.Data.GetData(DataFormats.Bitmap); 
    } 
} 

您可能会发现拖就this MSDN article落有用。

我也注意到在你的代码的MouseDownDragEnterDragDrop事件左撇子是多ButtonLabel控制相同。通过编写每个处理程序一次,然后将多个控件的事件注册到每个处理程序,您可以重构一些事情。例如,您可以将您的Label1Label10的DragDrop事件注册到上面提供的处理程序。在Designer或代码中执行此操作:

label1.DragDrop += Label_DragDrop; 
label10.DragDrop += Label_DragDrop;