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