Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拖放图像_C#_.net_Winforms - Fatal编程技术网

C# 拖放图像

C# 拖放图像,c#,.net,winforms,C#,.net,Winforms,有了这段代码,我可以将图像拖放到标签上,但现在我想将该图像从标签拖到另一个标签上。我该怎么做 namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Form2() { InitializeComponent(); Image img = Image.FromFile(@"D:\test\test.

有了这段代码,我可以将图像拖放到标签上,但现在我想将该图像从标签拖到另一个标签上。我该怎么做

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));
        }
    }
}
问题出在标签的DragDrop处理程序中。您可以使用如下代码直接复制拖放操作的“有效负载”:

private void Label_DragDrop(object sender, DragEventArgs e) {
    if (e.Data.GetDataPresent(typeof(Bitmap))) {
        ((Label)sender).Image = (Image)e.Data.GetData(DataFormats.Bitmap);
    }
}
您可能会发现拖放操作非常有用

我还注意到,在您的代码中,MouseDown、DragEnter和DragDrop事件处理程序对于多个按钮和标签控件是相同的。通过编写每个处理程序一次,然后向每个处理程序注册多个控件的事件,可以稍微重构一些东西。例如,您可以将Label1和Label10的DragDrop事件注册到我上面提供的处理程序中。在设计器中或通过代码执行此操作:

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