Case überspringt einen Fall
-
Also ich schreibe grad ein nettes kleines progrämchen... ich habe ein Image was beim draufklicken das nächste bild zeigen soll. Da es mehrere Bilder sind habe ich mir mit einer Case Struktur geholfen. Und einer Variable die nach jedem draufklick um eins steigt. Also man klickt auf nächstes bild dann wird die Variable Bild um 1 erhöt. Das wäre dann case 1. Das bild wird auch noch geladen. Danach wird nochmal draufgedrückt und es sollte case 2 ausgeführt werden stattdessen wird case 3 ausgeführt. Nach wiederholten drauf drücken wird danach auch nicht case 4 ausgeführt sondern wieder case 3. Wenn man dann aber noch auf nächstes bild klickt dann wird case 4 angezeigt. Es scheint fast so als wenn er case 3 einfach für case 2 ebenfalls einsetzen würde. Das passiert bei einem anderen bild ebenfalls. Was ich noch herrausgefunden habe war das er case 2 ausführt aber anschließend gleich case 3. Also wird case 2 schonmal nicht ausgellasen.
void __fastcall TForm1::imgweiterClick(TObject *Sender) { switch (Bild) { case 0: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\2002-5d.jpg"); Label1->Caption = "Klassenfoto 5D" ; break; case 1: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\Logo-5d.jpg"); Label1->Caption = "Logo 5D" ; case 2: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\Fels-5d.jpg"); Label1->Caption = "Fels 5D" ; break; case 3: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\Römer-6d.jpg"); Label1->Caption = "Römer 6D" ; break; case 4: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\2002-7d.jpg"); Label1->Caption = "Klassenfoto 7D" ; break; case 5: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\Bergbau-7d.jpg"); Label1->Caption = "Bergbau 7D" ; break; case 6: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\Waldeinsatz-8d.jpg"); Label1->Caption = "Waldeinsatz 8D" ; break; case 7: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\2002-9d.jpg"); Label1->Caption = "Klassenfoto 9D" ; break; case 8: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\Bergen-Belsen-9d.jpg"); Label1->Caption = "Bergen-Belsen 9D" ; case 9: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\Theater-9d.jpg"); Label1->Caption = "Theater 9D" ; break; case 10: Form1->imgdiashow->Picture->LoadFromFile("Klassenfotos\\2002-10d.jpg"); Label1->Caption = "Klassenfoto 10D" ; break; } Bild ++; if (Bild==11) { Bild=0; } }
Ich habe geguckt es sind nicht die gleichen Bilder. Er lädt das bild von case 2 auch kurz aber geht dann gleich zu case 3 über und case 3 ist dann gleich 2 mal, als wenn er case 3 an die Stelle von case gesetzt hätte.
Hoffe irgendwer hat eine Lösung für mein Problem
. Schonmal danke im vorraus
-
Hallo,
beim kurzen überfliegen fällt auf, dass in case 1 und 8 jeweils das break; fehlt
mfg, Micha!
-
ups schon etwas peinlich... aber danke das war die löung meiner Probleme, thx
-
Hallo
Das mit dem switch kannst du vermeiden, wenn du mit Arrays arbeitest. Kurzes Beispiel :
struct TBild { TBild(AnsiString Datei_, AnsiString Text_) : Datei(Datei_), Text(Text_) {}; AnsiString Datei; AnsiString Text; }; TBild Bilder[11] = {TBild("Klassenfotos\\2002-5d.jpg", "Klassenfoto 5D"), ... , TBild("Klassenfotos\\2002-10d.jpg", "Klassenfoto 10D")}; ... Form1->imgdiashow->Picture->LoadFromFile(Bilder[Bild].Datei); Label1->Caption = Bilder[Bild].Text ;
/Edit : Wenn man es richtig machen will dann legt man die Liste der Bilder in einer externen Textdatei ab und lädt diese beim Starten in ein dynamisches Array
bis bald
akari