Событие DragDrop не возникло

Это своего рода глупый вопрос ... Я пытаюсь перетащить окно с картинками на панель. Я следил за некоторыми примерами, но это не работает. Событие DragDrop панели никогда не возникает. Я искал на этом сайте решение и нашел две темы старше года, но их решения не сработали. Я создал новый проект только с этим кодом:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
            panel1.DragDrop +=new DragEventHandler(panel1_DragDrop);
            panel1.DragOver +=new DragEventHandler(panel1_DragOver);
        }

        private void panel1_DragOver(object sender, DragEventArgs e)
        {
            Console.WriteLine("DragOver");
        }

        private void panel1_DragDrop(object sender, DragEventArgs e)
        {
            Console.WriteLine("DragDrop");
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Console.WriteLine("Mouse");
            pictureBox1.DoDragDrop(pictureBox1.Text, DragDropEffects.All);
        }
    }

Я также установил для AllowDrop панели и формы значение true. DragOver и MouseDown подняты. Кроме того, когда я перетаскиваю окно с изображением, курсор становится обведенным чертой, как будто это была недопустимая операция. Есть ли способ превратить курсор в изображение в графическом блоке? Я не хочу, чтобы окно с картинками перемещалось, только чтобы добавить элемент на панель.


person Amaranth    schedule 06.11.2010    source источник


Ответы (2)


Ричард, проблема в том, что перетаскивание - не такая простая операция, как вы здесь написали. Здесь вы еще не начали перетаскивание, которое должно начинаться с кода, и вы можете прочитать об этом здесь ... http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop(v=VS.90).aspx

Если вы просто хотите переместить PictureBox ... перетаскивание окна изображения внутри winform во время выполнения

И, наконец, Перетащите между экземплярами одного и того же Приложение Windows Forms

Надеюсь это поможет.

person Rahul Soni    schedule 06.11.2010
comment
После нескольких попыток я исправил свою проблему, связанную с тем, что событие перетаскивания не возникает. В остальном работает отлично. Мне нужно было только добавить это, чтобы событие перетаскивания работало. private void canvasPanel_DragEnter (отправитель объекта, DragEventArgs e) {e.Effect = DragDropEffects.Move ;; } - person Amaranth; 07.11.2010
comment
Ты прав! Я просто попробовал и понял, что вы имеете в виду. Красиво сделано :-) - person Rahul Soni; 07.11.2010

Проблему легко решить.

Вы должны просто установить соответствующий эффект в DragEnter:

private void Form1_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.All;
}

После этого событие DragDrop запускается правильно.

person FloatOverflow    schedule 18.12.2013
comment
Да, это правильное решение. Как я уже упоминал в своем комментарии три года назад, я использовал DragDropEffects.Move вместо .All, что тоже работает в моем конкретном случае. - person Amaranth; 20.12.2013