Button-Hintergrundbild ändern
-
Dienstag, 19. Februar 2013 14:48
Hallo,
erstmal sorry für die "Noob"-Frage, aber ich sitz glaub ich grad echt auf der Leitung.
Ich will in meinem Eventhandler von einem Button einfach das Hintergrundbild anderer Buttons ändern. Habs zwar versucht aber ich mache was falsch...
Ich benutze MVS 2010 und programmiere in C++/CLI.
Kann mir jemand die einfache COdezeile kurz posten? Wäre echt dankbar^^
mfg
Alle Antworten
-
Dienstag, 19. Februar 2013 15:37
Hallo flo1993,
die von Ihnen erwünschte Funktionalität können Sie in dem Click-Event eines Buttons implementieren. Schauen Sie bitte den folgenden Codeausschnitt an und passen Sie diesen Ihrem Projekt an. Weitere Informationen, sowie ein Beispiel über die BackgroundImage-Eigenschaft können Sie unter [1] finden.
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { if(button1->BackgroundImage == Image^ BackgroundImage){ button1->BackgroundImage = image; } else{ button1->BackgroundImage = image; } }Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.
Viele Grüße,
Hristo Valev
App-Entwickler-Hotline für MSDN Online Deutschland
Disclaimer:
Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline
Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu MarkenzeichenInformationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.- Bearbeitet Hristo Valev Dienstag, 19. Februar 2013 15:41 Fehler im Codeauschnitt
- Als Antwort vorgeschlagen KoopakillerMicrosoft Community Contributor Dienstag, 19. Februar 2013 17:21
-
Dienstag, 19. Februar 2013 15:41
Hallo,
ergänzend zu Hristo möchte ich dich noch auf diesen Thread verweisen, dort findest du Informationen wie du das Bild auslesen kannst.
PS: Warum C++/CLI?
http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
- Als Antwort vorgeschlagen KoopakillerMicrosoft Community Contributor Dienstag, 19. Februar 2013 17:21
-
Dienstag, 19. Februar 2013 15:49
Muss ich für die Schule benutzen...
Muss da ein Spiel(Dame) programmieren...
Im privaten Bereich nehm ich C# :)
mfg
-
Mittwoch, 20. Februar 2013 16:09
Noch eine kleine Frage dazu;
if(oldButton == clickedButton) hilf = 2; else hilf = 1;
Wobei das beides Buttons sind die ich mithilfe der
clickedButton = dynamic_cast<Button^>(sender);
bekomme und anschließend
oldButton = clickedButton;
zuweise.
Mache ich da irgendwas falsch? Er setzt bei mir die hilf Variable nie auf 2, obwohl ich kurz vor der ersten if-Abfrage die Zuweisung von oben mache, d.h. er müsste da auf jedenfall reingehen.
mfg
-
Mittwoch, 20. Februar 2013 16:58
Wenn dein Code in etwa so aussieht:
Button^ b = dynamic_cast<Button^>(sender); Button^ b2 = b; if(b2 == b) MessageBox::Show("Equeal");Dann zeigt er mir immer eine MessageBox an, funktioniert also.
Wenn du 2 unterschiedliche Buttons vergleichst, dann sind diese nie gleich. Selbst wenn alle Eigenschaften überein stimmen. Jede Klasseninstanz zeigt auf seinen Eigenen Teil des Arbeitsspeichers. In diesem Fall könntest du vielleicht die Name-Eigenschaft der Buttons abfragen und vergleichen.
Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
-
Mittwoch, 20. Februar 2013 17:34
Danke, das funktioniert soweit.
Trotzdem hab ich noch ein Problem. Ich will abfragen on der Button ein HintergrundImage hat. Einmal frage ich ab:
if(clickedButton->BackgroundImage == nullptr) { clickedButton->BackgroundImage = Image::FromFile("Bilder\\Rot_Dame.jpg"); }dies geht auch, aber die Abfrage:
if(clickedButton->BackgroundImage == Image::FromFile("Bilder\\Gelb_Dame.jpg")) { clickedButton->BackgroundImage = nullptr; }trifft nie zu, obwohl genau dieses Bild als BackgroundImage eingestellt ist.
-
Mittwoch, 20. Februar 2013 17:36
Das liegt daran, das ein neues Objekt erzeugt wird. Wenn du stattdessen folgende Abfrage verwendest, funktioniert es:if(clickedButton->BackgroundImage != nullptr) {
clickedButton->BackgroundImage = nullptr; }Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
-
Mittwoch, 20. Februar 2013 17:44
Kann ich auch ein spezielles Bild abfragen?
Ich muss nämlich wissen ob es einen roten oder gelben Spielstein als Bild hat, da ich ein einfaches Dame-Spiel programmieren will.
mfg
-
Mittwoch, 20. Februar 2013 18:09
Da fallen folgende Wege ein:
- Eine Klasse von Button ableiten udn eine Eigenschaft hinzufügen die den Status enthält. Dieses musst du dann immer gemeinsamm mit dem BackgroundImage zuweisen.
- Ein Pixel mittels GetPixel vergleichen, von dem du weißt das Sie unterschiedliche Farben haben. Versuche es bei 1 Pixel zu belassen, da GetPixel recht langsam ist. Alternativ kann man natürlich auch alle Pixel vergleichen, wobei in diesem Fall LockBits um einiges schneller wäre.
Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
- Als Antwort markiert flo1993 Donnerstag, 21. Februar 2013 08:38

