C# Problem mit Pictureboxen Array

nachtfrost23

Lieutenant
Registriert
März 2008
Beiträge
644
Hi, ich habe gerade versucht in einem Programm einen Pictuerboxen Array einzubinden, der es mir erlaubt eine variable Anzahl Pictureboxen in ihrer Größe relativ zur Fenstergröße und ihrer Anzahl anzuzeigen.
Konkret geht es darum, neben einem groß dargestellten Bild (picturebox1;das funktioniert bereits) eine Vorschau der nächsten Bilder (man kann mit den Pfeiltasten navigieren) zu geben.

Um zu testen ob die Pictureoxen überhaupt erstellt werden, habe ich den Code so geändert, dass kein Bild eingebunden wird, sondern der Hintergrund schwarz gefärbt wird.

Der mit "//" deaktivierte Code soll zum Einbinden der Bilder dienen.

Den Code dazu findet ihr im Spoiler.

Vielen Dank
mal wieder nachtfrost


Code:
public MainForm()
		{
			InitializeComponent();
			dateinamen=Directory.GetFiles("./Bilder/");
			j=0;
			Bitmap bild = new Bitmap(dateinamen[j]);
			pb=5;  //soll später variable sein
			pictureBox1.Image=(Image) bild;
			vorschau= new PictureBox[pb];
			
			for(int i=0; i<pb; i++)
			{
				vorschau[i] = new System.Windows.Forms.PictureBox();
				vorschau[i].Location = new System.Drawing.Point(ClientSize.Height/pb+10+i*(ClientSize.Height/pb-10), 5);
				vorschau[i].Size = new System.Drawing.Size(ClientSize.Height/pb-10, ClientSize.Width/(pb*2));
				vorschau[i].BackColor = System.Drawing.Color.Black;
					//Bitmap vorschaubild = new Bitmap(dateinamen[j+1]);
					//vorschau[i].Image=(Image) vorschaubild;
			}

Lösung:

Habe gestern meinen Infolehrer gefragt.
Das ganze war so schon (fast) richtig. Es fehlte nur noch eine Zeile:

Code:
this.Controls.Add(vorschau[i]);

"Fast", weil ich bei den Koordinaten der Position x und y verdreht habe und weil es nicht so funktioniert, wie ich wollte, aber das ist jetzt auch egal, da wir das im Unterricht ganz anders (mit festen Werten) weitergemacht haben und das so viel besser aussieht.

Danke an alle, die sich die Zeit genomme haben hier eine Antwort zu schreiben.

LG nachtfrost
 
Zuletzt bearbeitet:
ähm. ich suche jetzt die Frage in deinem Beitrag.

Verstehe ich das richtig, dass es so eine Art "slideshow" werden soll mit der Vorschauf für die z.b 2 nächsten und voherigen Bilder oder willst du alle Bilder in einer kleinen Ansicht sehen?

Es ist besser, wenn du nur soviele picteBoxes anlegst, wie du auch gleichzeitig anzeigst. Bei der Navigation werden dann nur die Bitmaps in den Boxen ausgewechselt. Wenn du zum Beispiel 1 großes Bild anzeigst und jeweils das nächste und vorherige brauchst du neben einem Array von Bitmaps nur 3 PictureBoxes.

Wenn du es trotzalledem mit mehr PictureBoxes lösen willst, muss du diese noch dem Formular hinzufügen.
Code:
this.Cotainer.add(vorschau[i]);

Das Problem was dann entsteht ist, dass du den LayoutManager nocht so einstellen musst, dass die PictureBoxes nach deinen Vorstellungen angeordnet werden - diese Anpassung entfällt bei der Verwendung von z.B. nur 3 PictureBoxes. Diese würden dann fix im Designer konfiguriert werden.
 
Upsala, da habe ich doch wirklich die Frage vergessen. Tut mir Leid, ich war eben etwas in Eile.
Also Kagees Erläuterungen gehen schon in die richtige Richtung.

Rechts ist ein größeres Bild und links sollen mehrere Pictureboxen sein(die eine Vorschau der restlichen im Ordner befindlichen Bilder geben), deren Anzahl man im Programm einstellen können soll. (Deswegen ein Pictureboxen Array.) Am Ende soll das in etwas so aussehen, wie bei dem Link von Grantig, nur dass die Vorschaubilder links am Rand sein sollen.

Kagee schrieb:
Code:
this.Cotainer.add(vorschau[i]);
.

Durch "" habe ich doch einen Array an Picturboxen, oder nicht? Dann brauch ich doch nicht noch einen Container!?

Mein Infolehrer (das Programm ist eine Übung) hat gesagt, wir sollten das so (mit Picturebox Arrays) machen.
Grantig schrieb:
Dafür gibts schon fertige Controls, sogar Open Source.
Das hab ich auf die schnelle gefunden - sieht ganz gut aus: klick

Man muss ja nicht immer das Rad neu erfinden ;)

Es sei denn, der Infolehrer befiehlt 's. ;)

Ansonsten: Danke für die Bemühungen
 
[UDS]nachtfrost schrieb:
Es sei denn, der Infolehrer befiehlt 's. ;)

Ansonsten: Danke für die Bemühungen

Na und, wichtig ist doch nur das du den code verstehst.

Das ist meiner meinung nach wichtiger, als das rad neu erfinden zu wollen....
 
Rossibaer schrieb:
Also eine Hausaufgabe?

Nein. Wir haben im Unterricht mit dem Projekt begonnen und ich habe zu Hause probiert weiterzumachen (freiwillig), bin aber an beschriebenenm Punkt nicht weitergekommen.
 
[UDS schrieb:
nachtfrost]Es sei denn, der Infolehrer befiehlt 's.
Na wenn du freiwillig weitermachst, dann ist es doch deine Entscheidung wie du es löst.

Du musst ja nicht das Control benutzen, das ich gepostet hab, aber du könntest dir den Sourcecode davon runterladen und mal nen Blick rein werfen.
Ich sehs da genauso wie olampl - das wichtigste ist nicht, dass du alles selbst schreibst, sondern dass du den Code verstehst, den du benutzt.
 
Also so ganz verstehe ich das Problem immer noch nicht. Ich würde ja gerne meinen Senf dazu geben, aber wo genau hängt es jetzt?
 

Ähnliche Themen

Zurück
Oben