답변됨 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
     
     Vorgeschlagene Antwort Enthält Code
    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;
    	}
    }	 

    [1] http://msdn.microsoft.com/en-us/library/system.windows.forms.control.backgroundimage.aspx?cs-save-lang=1&cs-lang=cpp  

    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
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    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.


  • Dienstag, 19. Februar 2013 15:41
     
     Vorgeschlagene Antwort

    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

  • 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
     
      Enthält Code

    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
     
      Enthält Code

    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
     
      Enthält Code

    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
     
      Enthält Code
    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
     
     Beantwortet

    Da fallen folgende Wege ein:

    1. 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.
    2. 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
    •