尝试使用PictureBoxes创建拖放-事件;t触发器

本文关键字:事件 触发器 拖放 创建 PictureBoxes | 更新日期: 2023-09-27 18:16:53

编辑1/分辨率:

好吧,我找到了丢失的东西。我没有设置任何事件处理程序。现在它与以下一起工作

public Form1()
{
    InitializeComponent();
    pictureBox1.DragEnter += new DragEventHandler(pictureBox1_DragEnter);
    pictureBox1.DragDrop += new DragEventHandler(pictureBox1_DragDrop);
}

所以我的下一个问题是……为什么我必须设置这些?像ButtonClick这样的东西知道该去哪里。。。那么,为什么其他事件不会呢?

我对C#还是有点陌生。

-

原始问题:

我正忙着把电脑里的图片拖放到图片框里。

我在VB中有一个工作版本。所以我只是(尽我所能(把它全部翻译成C#。

我的DragEnter事件根本没有触发。。。我不确定我错过了什么。

由于C#/VB的差异,我不得不更改一些内容,但它基本上是相同的代码。我觉得我错过了更多的活动或什么。。。我只是不知道是什么。

即使事实证明我有一些代码错误。。。我的程序甚至从未启动DragEnter。。。。如果我在该事件中放入一个伪调试行或MessageBox,只是为了看看它是否运行。。。。。它从来没有。

我的表单加载

private void Form1_Load(object sender, EventArgs e)
{

    pictureBox1.AllowDrop = true;
    pictureBox1.BorderStyle = BorderStyle.FixedSingle;
    this.AllowDrop = true;
}

我的DragEnter

 private void pictureBox1_DragEnter(object sender, DragEventArgs e)
    {

        string[] formats = e.Data.GetFormats();
        if (e.Data.GetDataPresent(DataFormats.Bitmap))
        {
            if (e.KeyState == CtrlMask && CtrlMask == CtrlMask)
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.Move;
            }
        }
        else if (e.Data.GetDataPresent(DataFormats.FileDrop))
        {
            e.Effect = DragDropEffects.All;
        }
        else if (e.Data.GetDataPresent(DataFormats.Rtf))
        {
            if (e.KeyState == CtrlMask && CtrlMask == CtrlMask)
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.Move;
            }
        }
    }

还有我的DragDrop。。

  private void pictureBox1_DragDrop(object sender, DragEventArgs e)
    {

        if (e.Data.GetDataPresent(DataFormats.Bitmap))
        {
           var bmp = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
        pictureBox1.Image = bmp;
        }
        else if (e.Data.GetDataPresent(DataFormats.FileDrop))
        {
            string[] files;
            files = (string[])e.Data.GetData(DataFormats.FileDrop);
            foreach (string file in files)
            {
                string Newfile = file.ToLower();
                string[] ImageTypes = { "gif", "jpg", "png", "bmp" };
                string ActualFileExt = "";
                foreach (string FileExtension in ImageTypes)
                {
                    if (Newfile.EndsWith(FileExtension))
                    {
                        ActualFileExt = FileExtension;
                    }
                }
                if (ActualFileExt != "")
                {
                    pictureBox1.Image = new Bitmap(Newfile);
                }
            }
        }
        else if (e.Data.GetDataPresent(DataFormats.Rtf))
        {

        }

    }

尝试使用PictureBoxes创建拖放-事件;t触发器

您必须显式添加处理程序,因为在drop/ennter方法之后没有使用"Handles"关键字。请注意,此示例中的示例代码使用类似于按钮的Handles关键字。