[C#] Drag image uit explorer op picturebox, geen events

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben aan het stoeien met Drag&Drop. Wat ik uiteindelijk wil is dat ik een plaatje kan selecteren in Explorer en die in mijn picturebox kan 'gooien'.
Dit lukt al niet goed, dus ben ik al de hele avond aan het lezen en uitproberen.

Ik kom vaak hetzelfde voorbeeld tegen:
Een listbox op je form, je gooit er wat bestanden op en de bestandsnamen worden in de listbox getoond.

Maar ook als ik dat voorbeeld probeer, gebeurt er niets. Mijn DragOver, DragDrop en DragEnter events worden niet getriggerd.

Uiteraard heb ik AllowDrop op true staan, voor zowel de listbox als het form.
Deze property staat ook op true tijdens het debuggen.

Ik gebruik C# in VS2010 op een Win7 laptop.
Hier wat designer code:
C#:
1
2
3
4
5
6
7
8
9
10
            this.listBox1.AllowDrop = true;
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Location = new System.Drawing.Point(12, 12);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(204, 173);
            this.listBox1.TabIndex = 3;
            this.listBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseClick);
            this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
            this.listBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);
            this.listBox1.DragOver += new System.Windows.Forms.DragEventHandler(this.listBox1_DragOver);


En hier mijn event handlers:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
        private void listBox1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.All;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void listBox1_DragDrop(object sender, DragEventArgs e)
        {
            string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            int i;
            for (i = 0; i < s.Length; i++)
            {
                listBox1.Items.Add(s[i]);
            }
        }

        private void listBox1_DragOver(object sender, DragEventArgs e)
        {
            if ((e.AllowedEffect & DragDropEffects.Copy)
                == DragDropEffects.Copy)
            {
                e.Effect = DragDropEffects.Copy;
            }
        }

        private void listBox1_MouseClick(object sender, MouseEventArgs e)
        {
            MessageBox.Show("listBox1.AllowDrop:" + this.listBox1.AllowDrop);
        }


Zoals gezegd worden bovenstaande drag methoden niet aangeroepen. Als ik de bestanden drag naar mijn listbox, blijft mijn cursor een rondje met een streep erdoor (Nodragging allowed).

Het lijkt erop dat ik nog iets vergeet aan te zetten, maar ik kom er niet uit.
Iemand nog een suggestie?

Acties:
  • 0 Henk 'm!

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 19-08 14:24

ZaZ

Tweakers abonnee

Run je VS of je app elevated? Zo ja, dan mag je explorer (run as user) niet communiceren met je app (run as admin)

Lekker op de bank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ZaZ: Dat was niet het probleem, maar hielp wel met de oplossing.
ipv in VS mijn app te testen heb ik net de exe gestart. Als ik dan het formulier open met de listbox kreeg ik een 'DragDrop registration did not succeed' foutmelding.
Vervolgens daar op gezocht en daaruit bleek dat ik de [STAThread] Attribute boven mijn main moest zetten.
Dat heb ik gedaan en het werkt nu, ook in VS.

Zoals ik al dacht moest ik nog wat simpels doen, maar als je niet weet wat dat is, blijkt iets simpels ook erg lastig ;)

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16-09 15:42

Sebazzz

3dp

Apart, volgens mij hoort een Form niet eens te werken als er geen STAThreadAttribute boven de main methode staat. Dan gooit ie namelijk een Exception op in de constructor of in de Show method (die wordt aangeroepen door Application.Main).

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]