Usare il drag-and-drop in C#

Mattepuffo's logo
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!


Condividi

Commentami!