Простая проблема обработки событий Drag & Drop - PullRequest
0 голосов
/ 17 января 2011

Я новичок в использовании обработки событий в 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, и оно работало нормально, но когдапытаясь сделать то же самое, когда они сбрасывали значения над текстовым полем, я не мог заставить его работать.

1 Ответ

1 голос
/ 17 января 2011

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

...