简单拖动;丢弃事件处理问题

时间:2011-01-17 17:28:34

标签: c# .net windows-forms-designer

我是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;
    }

}

我意识到这是一个过于简单的例子。如果你看到我做错了什么,请告诉我。
编辑为了举例说明为什么我感到困惑,我改变了这个示例,在DragOver事件被触发时将拖动的ListBox项文本放入文本框中,并且它工作正常,但是当我尝试当他们将值放在文本框上时做同样的事情,我无法让它工作。

1 个答案:

答案 0 :(得分:1)

处理小组的DragEnter事件,并将e.Effects设置为None以外的其他内容。