Usare il drag-and-drop in C#

Usare il drag-and-drop in C#

Oggi vediamo come impostare il drag-and-drop dentro a Windows Form usando C#.

Prima di tutto, dentro al form, aggiungete un oggetto Label.

Ci servirà per visualizzare i files che trasciniamo nella finestra.

A questo punto dobbiamo impostare tre eventi:

  • load del form
  • drag
  • drop

In sostanza la nostra classe diventa così:

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

        private void Form1_Load(object sender, EventArgs e)
        {
            this.AllowDrop = true;
        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            foreach (string f in files)
            {
                this.label1.Text += f + "n";
            }
        }
    }
}

In questo caso, gli eventi, li ho creati direttamente dall'IDE.

Se invece li vogliamo scrivere a mano, dobbiamo anche registrarli aggiungendo queste due righe:

this.DragEnter += new DragEventHandler(Form1_DragEnter);
this.DragDrop += new DragEventHandler(Form1_DragDrop);

Quindi la classe diventa così:

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

        private void Form1_Load(object sender, EventArgs e)
        {
            this.AllowDrop = true;
            this.DragEnter += new DragEventHandler(Form1_DragEnter);
            this.DragDrop += new DragEventHandler(Form1_DragDrop);
        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            foreach (string f in files)
            {
                this.label1.Text += f + "n";
            }
        }
    }
}

Se impostate gli eventi nell'IDE, e lasciate anche quelle due righe, gli eventi verranno doppiati.

Quindi in sostanza, ogni file che aggiungete verrà visualizzato due volte.

Grazie al forum di HTML.it per la dritta.

Enjoy!