Autor |
Beitrag |
AlanWake
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Mi 25.08.10 22:36
Hallo Leute,
Ich sitze gerade an einem neuen Projekt, kennt ihr das Programm: Windows Bild und Faxanzeige
Ich habe in meiner Form eine pictureBox1, einen Button und eine listBox1.
Ich wollte ein Programm schreiben das wenn ich ein Bild öffne alle Bild Pfade im Odner des geöffneten Bildes in der listBox1 angezeigt werden so das ich dann mit dem Button die Indexes durchgehen kann und so wie bei Windows Bild und Faxanzeige mir alle Bilder im Odner anschauen kann.
Weiß jeamand den Code womit ich alle Bildpfade in die listBox1 bekomme
Mit diesem Code öffne ich ein Bild und hatte versucht die Dateinamen in die listbox1 hinzuzufügen:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| OpenFileDialog Bild = new OpenFileDialog(); Bild.Filter = "Alle Dateien (*.*)|*.*";
if (Bild.ShowDialog() == DialogResult.OK) { this.pictureBox1.Image = new Bitmap(Bild.OpenFile()); listBox1.Items.Add(Bild.FileName); } Bild.Dispose(); |
Mit diesem Code setze ich das ausgewählte Item als Bild in die picturebox1:
C#-Quelltext 1: 2:
| Image neu = Image.FromFile(listBox1.SelectedItem.ToString()); pictureBox1.Image = neu; |
gruß Alan
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 25.08.10 23:57
Schau dir mal die Methode System.IO.Directory.GetFiles-Methode an. Der erste Parameter ist der Pfad, der zweite ein simples Suchmuster, wie "*.jpg".
So ist es leider nicht möglich, mehrere Endungen anzugeben. Wenn du das willst, musst du den zweiten Parameter weglassen und die Dateien stattdessen manuell auf die Endung prüfen.
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Do 26.08.10 01:05
Yogu hat folgendes geschrieben : | Schau dir mal die Methode System.IO.Directory.GetFiles-Methode an. Der erste Parameter ist der Pfad, der zweite ein simples Suchmuster, wie "*.jpg".
So ist es leider nicht möglich, mehrere Endungen anzugeben. Wenn du das willst, musst du den zweiten Parameter weglassen und die Dateien stattdessen manuell auf die Endung prüfen. |
Das hatte ich nicht gemeint ^^,
ich wollte eigetlich, das wenn ich ein Bild öffne, von allen Bildern im Odner die Pfade in die listbox1 als Items hinzugefügt werden
So wie hier, nur dann alle Pfade: www5.pic-upload.de/2....10/7v5wgzvnpidg.jpg
Mit diesem Code habe ich es nur geschafft immer den Pfad in die listBox1 hinzuzufügen den ich gerade geöffnet hatte
C#-Quelltext 1: 2: 3: 4:
| foreach (string test in Bild.FileNames) { listBox1.Items.Add(test); } |
gruß Alan
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 26.08.10 02:09
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Do 26.08.10 02:25
Mein Problem ist das ich keine Ahnung habe
Was ich bis jetzt habe ist:
C#-Quelltext 1: 2: 3: 4: 5: 6:
| folderBrowserDialog1.SelectedPath = System.IO.Path.GetDirectoryName(Bild.FileName);
foreach (string file in System.IO.Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.*", System.IO.SearchOption.TopDirectoryOnly)) { listBox1.Items.Add(file); } |
Damit öffne ich zwar alle Dateien im Odner aber auch Dateien wie Thumps.db und desktop.ini.
Gibt es eine Möglichkeit das er nur die sichtbaren Dateien öffnet ?
gruß Alan
ps. Ich brauche immer ein Code Beispiel sonst verstehe ich es nicht 
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Do 26.08.10 03:48
Habe es selber herausgefunden, dank Yogu mit *.jpg
C#-Quelltext 1: 2: 3: 4: 5: 6:
| folderBrowserDialog1.SelectedPath = System.IO.Path.GetDirectoryName(Bild.FileName);
foreach (string file in System.IO.Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.jpg", System.IO.SearchOption.TopDirectoryOnly)) { listBox1.Items.Add(file); } |
Gibt es eine Möglichkeit bei der listBox1 wenn ich zum letzten Index gekommen bin das die listBox1 automatisch wieder zum ersten geht und auch umgekehrt
gruß Alan
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Do 26.08.10 10:25
Das mit dem "springen" am Anfang auf das letzte Item und am Ende auf das Erste Item bekommst Du mit dem KeyDown-Event der listBox hin.
Du musst einfach nur den Key abfragen, der gedrückt wurde, und dann entsprechend reagieren.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| switch (e.KeyCode) { case Keys.Up: { if (listBox1.SelectedIndex == 0) { listBox1.SelectedIndex = listBox1.Items.Count - 1; e.Handled = true; } break; } case Keys.Down: { } } |
LG, Marko
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Do 26.08.10 20:05
@ Trashkid2000: Ich habe 2 Probleme,
Das 1 ist wenn die Liste oben/unten angekommen ist und dann nach unten/oben wechselt das ich nie das erste/letze Bild angezeigt bekomme
Das 2 ist, das ich immer zweil mal auf die Hotkey Taste am Anfang drücken muss bis das Bild wechselt
Mein Code dazu:
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:
| private void button1_Click(object sender, EventArgs e) { Bild.Multiselect = true; Bild.Filter = "Alle Dateien (*.*)|*.*"; if (Bild.ShowDialog() == DialogResult.OK) { this.pictureBox1.Image = new Bitmap(Bild.OpenFile()); folderBrowserDialog1.SelectedPath = System.IO.Path.GetDirectoryName(Bild.FileName);
foreach (string file in System.IO.Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.jpg", System.IO.SearchOption.TopDirectoryOnly)) { listBox1.Items.Add(file); listBox1.SelectedItem = Bild.FileName; pictureBox1.Select(); } listBox1.Items.Add(Bild.FileName); } Bild.Dispose(); }
private void pictureBox1_KeyDown(object sender, KeyEventArgs e) { Image neu = Image.FromFile(listBox1.SelectedItem.ToString()); pictureBox1.Image = neu; if (e.KeyCode == Keys.A) { listBox1.SelectedIndex++;
if (listBox1.SelectedIndex == listBox1.Items.Count - 1) { listBox1.SelectedIndex = 0; } } } |
Die listbox1 ist versteckt und der Hotkey soll über die pictureBox1 laufen.
Mit dem Code:
C#-Quelltext 1:
| listBox1.Items.Add(Bild.FileName); |
habe ich zwar das erste Problem beheben können aber das zweite Problem stört einfach
gruß Alan
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 26.08.10 20:49
Für diesen Beitrag haben gedankt: AlanWake
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Do 26.08.10 21:00
Hi,
wozu benötigst Du eigentlich einen FolderBrowseDialog?
Reicht das nicht hin:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| if (Bild.ShowDialog() == DialogResult.OK) { this.pictureBox1.Image = new Bitmap(Bild.OpenFile()); listBox1.Items.Clear(); listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(Bild.FileName), "*.jpg")); listBox1.SelectedItem = Bild.FileName; pictureBox1.Select(); } Bild.Dispose(); |
und im SelectedIndexChanged-Event der ListBox könntest Du einfach sagen:
C#-Quelltext 1:
| pictureBox1.Image = Image.FromFile(listBox1.SelectedItem.ToString()); |
Was ist eigentlich
C#-Quelltext 1:
| if (e.KeyCode == Keys.A) | ??
Also, normalerweise drückt man bei einer ListBox entweder Up oder Down auf der Tastatur, aber nicht "A"!?
Marko
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Do 26.08.10 21:32
@ Trashkid2000:
Danke das du meinen Code vereinfacht hast
Aber ich bekomme das mit dem wenn die listBox1 auf dem ersten/letzen Index ist das sie dann wechselt einfach nicht hin
Immer kommt ein anderer Fehler, und das Programm stürtz ab
Der häufigste Fehler wahr gewesehen wenn ich vom letzten zum ersten Index gewechselt bin und dann wieder die Taste gedrückt habe um auf dan letzten Index zu kommen, dann ist er mir immer abgestürtz, und umgekehrt
Mein Code:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| if (e.KeyCode == Keys.H) { listBox1.SelectedIndex++;
if (listBox1.SelectedIndex == listBox1.Items.Count - 1) { listBox1.SelectedIndex = 0; } }
if (e.KeyCode == Keys.G) { listBox1.SelectedIndex--;
if (listBox1.SelectedIndex == 0) { listBox1.SelectedIndex = listBox1.Items.Count - 1; } } |
Kann mir bitte jemand einen Beispiel Code geben, zur Lösung des Problems
gruß Alan
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Do 26.08.10 22:02
AlanWake hat folgendes geschrieben : |
Mein Code:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| if (e.KeyCode == Keys.H) { listBox1.SelectedIndex++;
if (listBox1.SelectedIndex == listBox1.Items.Count - 1) { listBox1.SelectedIndex = 0; } }
if (e.KeyCode == Keys.G) { listBox1.SelectedIndex--;
if (listBox1.SelectedIndex == 0) { listBox1.SelectedIndex = listBox1.Items.Count - 1; } } | |
Also, warum nutzt Du nicht mal den Anfang des Codes, den ich gepostet habe? Ich meine, die Keys G und H anzufragen macht wirklich keinen Sinn! Wer drückt schon G, um einen Eintrag in der ListBox nach oben zu gehen, und H, um einen Eintrag nach unten. Normalerweise ist es Keys.Up und Keys.Down (die beiden Pfeiltasten).
Und Du setzt den Index neu, ohne vorherige Prüfung, ob bei Index 0 angekommen, oder max. Anzahl an Elementen.
Guck Dir mal das Beispiel nochmal an!
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Do 26.08.10 22:09
Deinen Code hatte ich ausprobiert aber der geht nicht, da passiert garnichts wenn ich auf Up/Down gehe
Die Buchtaben G und H habe ich einfach nur als Beispiel genommen, ich wollte nacher die zwei durch left und right ersetzen
gruß Alan
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Do 26.08.10 22:37
AlanWake hat folgendes geschrieben : | Deinen Code hatte ich ausprobiert aber der geht nicht, da passiert garnichts wenn ich auf Up/Down gehe  |
Ja, weil Du den Eventhandler warscheinlich nur reinkopiert hast, aber nicht mit dem Event verknüpft hast.
So ist das. Nun gut, habe für heute genug.
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Do 26.08.10 22:41
Ich habe doch das KeyDown in meiner pictureBox1
Alan
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Do 26.08.10 23:12
So, mir ist es gelungen, dank Trashkid2000 habe ich die ganze Zeit überlegt was er gemeint hatte und bin dann auf die Lösung gekommen
Vielen dank an:
Trashkid2000
Yogu
Luckie
Mein Code:
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: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62:
| private void button1_Click(object sender, EventArgs e) { if (Bild.ShowDialog() == DialogResult.OK) { this.pictureBox1.Image = new Bitmap(Bild.OpenFile()); listBox1.Items.Clear(); listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(Bild.FileName), "*.jpg")); listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(Bild.FileName), "*.bmp")); listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(Bild.FileName), "*.png")); listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(Bild.FileName), "*.tif")); listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(Bild.FileName), "*.gif")); listBox1.Items.AddRange(Directory.GetFiles(Path.GetDirectoryName(Bild.FileName), "*.ico")); listBox1.SelectedItem = Bild.FileName; listBox1.Select(); } Bild.Dispose(); }
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { pictureBox1.Image = Image.FromFile(listBox1.SelectedItem.ToString()); }
private void listBox1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Up: { if (listBox1.SelectedIndex == 0) { listBox1.SelectedIndex = listBox1.Items.Count - 1; e.Handled = true; } break; } case Keys.Down: if (listBox1.SelectedIndex == listBox1.Items.Count - 1) { listBox1.SelectedIndex = 0; e.Handled = true; } break;
case Keys.Left: { if (listBox1.SelectedIndex == 0) { listBox1.SelectedIndex = listBox1.Items.Count - 1; e.Handled = true; } break; } case Keys.Right: if (listBox1.SelectedIndex == listBox1.Items.Count - 1) { listBox1.SelectedIndex = 0; e.Handled = true; } break; } } |
gruß Alan
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Fr 27.08.10 07:05
Na siehst Du, geht doch!
Sehr schön. Kleiner Tip noch am Rande:
Bei Deiner switch-Anweisung:
Man kann auch sowas schreiben, dann musst Du bei Fällen, bei dem das gleiche getan wird, nicht 2x das gleiche schreiben.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| case Keys.Up: case Keys.Left: { break; } ... |
LG, Marko
Für diesen Beitrag haben gedankt: AlanWake
|
|
AlanWake 
      
Beiträge: 75
Erhaltene Danke: 2
|
Verfasst: Fr 27.08.10 19:03
Danke für den Tip, hat super geklappt
gruß Alan
|
|