C # DragEnter событие Winforms DragDrop - PullRequest
1 голос
/ 05 декабря 2009

Зачем нам на самом деле нужно обрабатывать событие DragEnter для пункта назначения?

Каков его эффект в пункте назначения?

у источника

public partial class ToolBoxForm : System.Windows.Forms.Form
    {
        public ToolBoxForm()
        {
            InitializeComponent();
        }

        private void lbl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            Label lbl = (Label)sender;
            lbl.DoDragDrop(lbl.Image, DragDropEffects.Link);
        }
    }

В пункте назначения:

public partial class DrawingArea : Form
    {
        public DrawingArea()
        {
            InitializeComponent();
        }

        private void DrawingArea_Load(object sender, System.EventArgs e)
        {
            ToolBoxForm toolBoxForm = new ToolBoxForm();
            this.AddOwnedForm(toolBoxForm);
            toolBoxForm.Show();

            pictureBox1.AllowDrop = true;
        }

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

        private void picDrawingArea_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
            g.DrawImage((Image)e.Data.GetData(DataFormats.Bitmap), new Point(e.X - this.Left - 12, e.Y - this.Top - 30));
        }
    }

Когда я комментирую код:

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

Изображение не сбрасывается.

Ответы [ 2 ]

3 голосов
/ 05 декабря 2009

От до DragDropEffects Страница MSDN :

* 1007
* Участник имя Описание
Нет Цель удаления не принимает данные.
Копировать Данные из источника перетаскивания копируются в целевой объект перетаскивания.
Переместить Данные из источника перетаскивания перемещаются в целевой объект.
Ссылка Данные из источника перетаскивания связаны с объектом перетаскивания.
Прокрутка Цель можно прокручивать при перетаскивании, чтобы найти место падения, которое в данный момент не видно в цели.
Все Комбинация эффектов копирования, перемещения и прокрутки.

Так что вы должны установить что-то отличное от None, если хотите принять падение.

Однако следующая цитата привела меня к мысли, что она использовалась только для обратной связи:

Вы можете использовать DragDropEffects для отображения различных указателей мыши для операций перетаскивания. Например, вы можете отобразить символ плюс для операции перетаскивания Copy , символ стрелки для операции перетаскивания Move или красный кружок с проведите через него символ для операции перетаскивания Нет .

1 голос
/ 05 декабря 2009

Я действительно думаю, что событие Drop не сработает, если DragDropEvents оставить равным None (по умолчанию). Вот почему изображение не падает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...