Autor Beitrag
AlanWake
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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:

ausblenden 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:

ausblenden C#-Quelltext
1:
2:
            Image neu = Image.FromFile(listBox1.SelectedItem.ToString());
            pictureBox1.Image = neu;


gruß Alan
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Do 26.08.10 01:05 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
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 :(
ausblenden C#-Quelltext
1:
2:
3:
4:
            foreach (string test in Bild.FileNames)
                {
                    listBox1.Items.Add(test);
                }


gruß Alan
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 26.08.10 02:09 
user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:

ich wollte eigetlich, das wenn ich ein Bild öffne, von allen Bildern im Odner die Pfade in die listbox1 als Items hinzugefügt werden :)

Wo ist das Problem? Dann nimm den Pfad von dem Bild und übergebe ihn an die Methode GetFiles.

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Do 26.08.10 02:25 
Mein Problem ist das ich keine Ahnung habe :)

Was ich bis jetzt habe ist:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Do 26.08.10 03:48 
Habe es selber herausgefunden, dank Yogu mit *.jpg :)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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.
ausblenden 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//gehe auf das letzte Item
      e.Handled = true;  //
    }
    break;
  }
  case Keys.Down:
  {
    //tue etwas für den umgekehrten Weg
  }
}


LG, Marko

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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:

ausblenden volle Höhe 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:
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:
ausblenden C#-Quelltext
1:
listBox1.Items.Add(Bild.FileName);					

habe ich zwar das erste Problem beheben können aber das zweite Problem stört einfach :cry:

gruß Alan
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 26.08.10 20:49 
user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
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 liegt daran, dass du das letzte Bild ja auch komplett überspringst.

user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
 
27:
28:
29:
30:
31:
32:
/* ... */
                listBox1.SelectedIndex++;

                if (listBox1.SelectedIndex == listBox1.Items.Count - 1)
                {
                    listBox1.SelectedIndex = 0;
                }

Besser wäre es, wenn du den Index auf null zurücksetzt, wenn listBox1.Items.Count erreicht wird, nicht schon eins drunter.

user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
Das 2 ist, das ich immer zweil mal auf die Hotkey Taste am Anfang drücken muss bis das Bild wechselt :(

Das liegt daran, dass du das Bild aktualisierst, bevor du um eine Position weiterrückst. Deshalb wird beim ersten drücken auch nur das aktuelle Bild nochmal angezeigt und der interne Zeiger inkrementiert. Sichtbar wird die Änderung erst beim nächsten klicken.

user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
Die listbox1 ist versteckt

Ist die ListBox immer versteckt? Dann wäre eine List<string> und ein int als Zeiger besser geeignet.

Für diesen Beitrag haben gedankt: AlanWake
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 26.08.10 21:00 
Hi,

wozu benötigst Du eigentlich einen FolderBrowseDialog?

Reicht das nicht hin:
ausblenden 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:
ausblenden C#-Quelltext
1:
pictureBox1.Image = Image.FromFile(listBox1.SelectedItem.ToString());					


Was ist eigentlich
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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 :evil:

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:
ausblenden 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 :cry:

gruß Alan
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 26.08.10 22:02 
user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:

Mein Code:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 26.08.10 22:37 
user profile iconAlanWake hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Do 26.08.10 22:41 
Ich habe doch das KeyDown in meiner pictureBox1 :!:

Alan
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: 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:

ausblenden volle Höhe 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:
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//gehe auf das letzte Item
                            e.Handled = true;  //
                        }
                        break;
                    }
                case Keys.Down:
                    if (listBox1.SelectedIndex == listBox1.Items.Count - 1)
                    {
                        listBox1.SelectedIndex = 0//gehe auf das letzte Item
                        e.Handled = true;  //
                    }
                    break;

                case Keys.Left:
                    {
                        if (listBox1.SelectedIndex == 0)
                        {
                            listBox1.SelectedIndex = listBox1.Items.Count - 1//gehe auf das letzte Item
                            e.Handled = true;  //
                        }
                        break;
                    }
                case Keys.Right:
                    if (listBox1.SelectedIndex == listBox1.Items.Count - 1)
                        {
                            listBox1.SelectedIndex = 0//gehe auf das letzte Item
                            e.Handled = true;  //
                        }
                        break;
            }
        }


gruß Alan
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
case Keys.Up:          
case Keys.Left:
{
  //tu etwas
  break;
}
...


LG, Marko

Für diesen Beitrag haben gedankt: AlanWake
AlanWake Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75
Erhaltene Danke: 2



BeitragVerfasst: Fr 27.08.10 19:03 
Danke für den Tip, hat super geklappt :)

gruß Alan