Простая проблема обработки событий перетаскивания

Я новичок в использовании обработки событий в C# .NET и пытаюсь понять поведение некоторого простого кода, с которым я экспериментирую. Я работаю с более сложным примером, но надеюсь, что получу более сфокусированный ответ, если упрощу пример.

У меня есть следующий код, который определяет главное окно с ListBox, который инициализируется значениями, и панелью в окне. Я работаю с перетаскиванием элементов ListBox и размещением их на панели. Чтобы обозначить, что панель считывает событие DragDrop, я просто меняю цвет фона.

Моя проблема в том, что при удалении значений цвет фона не меняется, поэтому DragDrop не работает. Я знаю, что это немного преувеличено, но я пытаюсь понять, почему это не работает.

Вот следующий код, который я использую.

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

    private void Form1_Load(object sender, EventArgs e)
    {
        //Allow Panel to accept dropped values
        this.panel1.AllowDrop = true;

        //Initialize ListBox with sample values
        listBox1.Items.Add("First Name");
        listBox1.Items.Add("Last Name");
        listBox1.Items.Add("Phone");

        //Setup DragDrop Event Handler - is this correct, or even needed?
        this.panel1.DragDrop += new DragEventHandler(panel1_DragDrop);
    }

    private void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
        ListBox box = (ListBox)sender;
        String selectedValue = box.Text;
        DoDragDrop(selectedValue.ToString(), DragDropEffects.Copy);
    }

    private void panel1_DragDrop(object sender, DragEventArgs e)
    {
        //Change Background color to signify value has been dropped
        ((Panel)sender).BackColor = Color.Black;
    }

}

Я понимаю, что это слишком упрощенный пример. Если вы видите, что я делаю неправильно, пожалуйста, дайте мне знать.
EDIT Чтобы показать, почему я запутался, я изменил этот пример, чтобы поместить перетаскиваемый текст элемента ListBox в текстовое поле, когда событие DragOver было запущено, и это работало нормально, но когда Я пытался сделать то же самое, когда они опускали значения над текстовым полем, я не мог заставить его работать.


person TheJediCowboy    schedule 17.01.2011    source источник
comment
Вы надеетесь перетаскивать элементы списка?   -  person DevDemon    schedule 17.01.2011
comment
хорошо, в моем приложении да, но в этом примере я просто хочу знать, что событие DragDrop работает, когда я навожу указатель мыши на панель.   -  person TheJediCowboy    schedule 17.01.2011


Ответы (1)


Обработайте событие панели DragEnter и установите для e.Effects значение, отличное от None.

person SLaks    schedule 17.01.2011
comment
SLaks, я немного неправильно понимаю... не могли бы вы объяснить немного подробнее, заранее спасибо. - person TheJediCowboy; 17.01.2011
comment
См. документацию. msdn.microsoft.com/en-us/ библиотека/ - person SLaks; 17.01.2011
comment
Обработка событий DragOver/DragEnter элементов управления (панель, метка и т. д.) и установка e.Effetc =.... Спасибо за помощь. - person TheJediCowboy; 17.01.2011
comment
Это неправильно. Следует использовать событие DragEnter. И свойство e.Effects должно быть назначено, у AllowedEffects нет сеттера. - person Hans Passant; 17.01.2011