Entwickler-Ecke

WinForms - Drag & Drop in Listbox ohne kompletten Pfad


Scarecraft - Fr 18.04.08 19:13
Titel: Drag & Drop in Listbox ohne kompletten Pfad
Hallo an alle ,
also ich hab ein Event , das startet wenn ich was in eine Listbox ziehe .
Nunja das klappt alles toll , aber ich möchte nicht den ganze link "C:\\bla\\blaaaa\bla.mp3"
sondern nur :"bla.mp3" stehen haben ,,...
hatte das selbe prob bei openfile hab das so gelöst :





C#-Quelltext
1:
listBox1.Items.Add(System.IO.Path.GetFileName(open.FileName));                    


Naja hier der Eventcode des Drag and Drop erreignisses der Listbox:




C#-Quelltext
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:
private void Form1_Load(object sender, EventArgs e)
        {
           

            listBox1.AllowDrop = true;
            listBox1.DragOver += new DragEventHandler(listboxOnDragOver);
            listBox1.DragDrop += new DragEventHandler(listboxOnDragDrop);

        }
        void listboxOnDragOver(object obj, DragEventArgs dea)
        {
            if (dea.Data.GetDataPresent(DataFormats.FileDrop))
                dea.Effect = DragDropEffects.Move;
        }
        void listboxOnDragDrop(object obj, DragEventArgs dea)
        {
            if (dea.Data.GetDataPresent(DataFormats.FileDrop))
            {
                string[] dateien = (string[])dea.Data.GetData(DataFormats.FileDrop);
                listBox1.Items.AddRange(dateien);

                
                

                
            }
        }

Wichtig ist das dabei die extenison (.mp3 , .bmp,.avi) erhalten bleibt ...
Danke schonmal
schönen tag noch scarecraft !


JüTho - Fr 18.04.08 19:55

Hallo,

ich finde bei Deinem Thema keine Frage. Wo liegt denn das Problem?

Du brauchst nur Dein String-Array dateien nicht per AddRange, sondern per Add() einzeln zu übertragen; dabei lässt Du jeden String über Path.GetFile() laufen. Denn diese Methode benutzt einen String als Dateinamen, aber nicht eine wirklich vorhandene Datei.

Jürgen


Scarecraft - Mo 21.04.08 16:10

user profile iconJüTho hat folgendes geschrieben:
Hallo,

ich finde bei Deinem Thema keine Frage. Wo liegt denn das Problem?



Jürgen


Ja also : wenn ich das so mache wie oben dann steht da :

C#-Quelltext
1:
" C:\Programme\Musik\benutzer\Scarecraft\Mp3\Rock\Linkinpark\numb.mp3"                    

in der Listbox

Aber ich möchte gerne das da :

C#-Quelltext
1:
"numb.mp3"                    

Steht ;)
Danke schonmal


Christian S. - Mo 21.04.08 16:21

Aber was hindert Dich, das so zu machen wie Du's oben beim OpenDialog gezeigt hast? :gruebel:


JüTho - Mo 21.04.08 17:23

Wie ich es doch schon vorher geschrieben hatte:
user profile iconJüTho hat folgendes geschrieben:

Du brauchst nur Dein String-Array dateien nicht per AddRange, sondern per Add() einzeln zu übertragen; dabei lässt Du jeden String über Path.GetFile() laufen.

Es ist doch hoffentlich nicht nötig, dass wir die Schleife mit Deinem allerersten Code schreiben; das solltest Du doch selbst können.

Jürgen


Scarecraft - Di 22.04.08 16:45

Ja ich weis nun wie ihr das meint ,
aber mit der syntax hab ich noch probleme hab das nu so gemacht :


C#-Quelltext
1:
2:
3:
4:
5:
6:
 string [] dateien = (string[])dea.Data.GetData(DataFormats.FileDrop);

                for (int i = 0; i < dateien.Length; i++)
                {
                    listBox1.Items.Add(System.IO.Path.GetFileName(dateien)); ;
                }


Also die schleife dürfte tun ,aber der schleifen inhalt ist noch nicht ganz korreckt er sagt mir dabei :


C#-Quelltext
1:
The best overloaded method match for 'System.IO.Path.GetFileName(string)' has some invalid arguments                    


mh .. ich bin wohl einfach zu blöde :P


Christian S. - Di 22.04.08 17:00

dateien ist ein Array, welches Du mit einer Schleife durchläufts. Du willst die einzelnen Elemente des Arrays an die Methode übergeben, im Moment übergibst Du das komplette Array.


JüTho - Di 22.04.08 18:16

Ich hoffe, dass ich Dich mit meinem Hinweis nicht zusätzlich verwirre. Unter C# (und anderen neueren Programmiersprachen) gibt es die foreach-Schleife:

C#-Quelltext
1:
2:
3:
4:
string[] stringArray = ...// was auch immer
foreach(string s in stringArray) {
   //  verarbeite s
}

Das vereinfacht sehr oft das Schreiben von Schleifen. Die Reihenfolge entspricht meistens dem indizierten Zugriff (aber nicht immer); wenn es nicht auf die Reihenfolge ankommt, ist foreach meistens vorzuziehen.

Jürgen


Scarecraft - Di 22.04.08 19:24

ah habs geschafft , bin ja dochnet so blöde ^^


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string[]  dateien = (string[])dea.Data.GetData(DataFormats.FileDrop);

                foreach (string s  in dateien)
                {
                    listBox1.Items.Add(System.IO.Path.GetFileName(s)); 

                }


Dankeschön an alle :) and :
Have a nice day!!!
Mfg Scarecraft