Funktion in Visual C++ wird zweimal abrufen?
-
Hallo Leute!
Wahrscheinlich ist dies ein typischer Anfängerfehler, aber ich habe nix passendes im Internet gefunden: Und zwar führt mein Programm (mit Visual C++ 2010 Express programiert) eine Funktion völlig korrekt aus, aber wenn der Compiler am Ende der Funktion angekommen ist, fängt er nochmal von oben an, die Funktion abzuarbeiten...
Somit wird dann z.B. eine Variable, die ich in der Funktion um eins kleiner machen lasse, um zwei kleiner, weil die Funktion einfach zweimal ausgeführt wird.Ich weiß nicht mehr, was ich machen soll und bin echt ein bisschen am Verzweifeln.
Wäre schön, wenn mir jemand helfen könnte...
LG,
IalokimPS.: Ich hoffe, ich bin hier im richtigen Unterforum gelandet, wenn nicht, könnte der Beitrag bitte verschoben werden...
-
Ohne Code nix los.
-
Gut, ich kann ja mal den Code reinstellen, aber er ist leider etwas unübersichtlich... Reicht es, wenn ich euch folgendes gebe...?
private: void würfel_Click(System::Object^ sender, System::EventArgs^ e) { //Sound von soungle.com!!! panel1house->Click += gcnew System::EventHandler(this, &Form1::panel1house_Click); würfel->Visible = false; würfelsound->Play(); Random ^zufall = gcnew Random(); wurf = zufall->Next(1, 7); würfel->Load("Bilder\\Hilfe\\spielwürfel_" + wurf + ".bmp"); Thread::Sleep(1500); würfel->Visible = true; if (currentplayer == p1name) { if (p1fih > 0 && p1time > 1) { SwitchPlayer(); p1time = 0; return; } else if (p1fih == 4) { if (wurf == 6) { update->Text = currentplayer + " darf aus seinem Haus rücken."; panel1house->BorderStyle = System::Windows::Forms::BorderStyle::Fixed3D; panel1house->Click += gcnew System::EventHandler(this, &Form1::panel1house_Click); würfel->Cursor = System::Windows::Forms::Cursors::No; würfel->Click -= gcnew System::EventHandler(this, &Form1::würfel_Click); return; } else if (p1time < 2) { update->Text = currentplayer + " darf noch einmal würfeln."; p1time++; return; } } else { if (wurf == 1) update->Text = currentplayer + " muss 1 Feld vorrücken."; else if (wurf == 6) update->Text = currentplayer + " muss 6 Felder vor- oder aus seinem Haus rücken."; else update->Text = currentplayer + " muss " + wurf.ToString() + " Felder vorrücken."; würfel->Cursor = System::Windows::Forms::Cursors::No; würfel->Click -= gcnew System::EventHandler(this, &Form1::würfel_Click); return; //SwitchPlayer(); } } else if (currentplayer == p2name) { if (p2fih > 0 && p2time > 1) { SwitchPlayer(); p2time = 0; return; } else if (p2fih == 4) { if (wurf == 6) { update->Text = currentplayer + " darf aus seinem Haus rücken."; panel2house->BorderStyle = System::Windows::Forms::BorderStyle::Fixed3D; panel2house->Click += gcnew System::EventHandler(this, &Form1::panel2house_Click); würfel->Cursor = System::Windows::Forms::Cursors::No; würfel->Click -= gcnew System::EventHandler(this, &Form1::würfel_Click); } else if (p2time < 2) { update->Text = currentplayer + " darf noch einmal würfeln."; p2time++; } } else { if (wurf == 1) update->Text = currentplayer + " muss 1 Feld vorrücken."; else if (wurf == 6) update->Text = currentplayer + " muss 6 Felder vor- oder aus seinem Haus rücken."; else update->Text = currentplayer + " muss " + wurf.ToString() + " Felder vorrücken."; würfel->Cursor = System::Windows::Forms::Cursors::No; würfel->Click -= gcnew System::EventHandler(this, &Form1::würfel_Click); //SwitchPlayer(); } } }
Ich hoffe, damit kann man was anfangen. Aber, wie gesagt, der Compiler meldet keinerlei Probleme, sondern er wiederholt einfach die gesamte Funktion...
LG,
Ialokim
-
mhn... vielleicht hast du diese Ereignisbehandlungsmethode noch mit einem anderen Ereignis außer "Click" vebunden?
-
Du hast sicherlich das Click-Event mit diesem Handler zweimal abonniert.
Such einfach nach Click += würfel_Click, irgendwo wird dieser Code mehrfach ausgeführt.
-
Hallo & vielen Dank für die schnellen Antworten!
Es war tatsächlich doppelt definiert, und nachdem ich das geändert hatte, läuft jetzt alles wieder wie gewollt...
Echt ein super Forum, wo so schnell die richtige Lösung gefunden wird! Hut ab!
LG,
Ialokim