2011-01-14 15 views
1

Hier ist mein Code:Vergleichen eines Bildes mit einer Bitmap?

borderTop.BackgroundImage == Properties.Resources.buttonTopSelected 

Ich muss sehen, ob die .BackgroundImage Eigenschaft das gleiche wie das Bild, das ich zu Ressource hinzugefügt. Wie kann ich diese beiden Bilder vergleichen?

In Code ist einer ein Bild und einer ist eine Bitmap.

Irgendwelche Vorschläge?

+0

Sie müssen mehr von dem Code, ich verstehe nicht, wie sich Ihre Frage zu Ihrem Code-Snippet bezieht. – Lazarus

+0

@Lazarus: Ich werde meine Frage bearbeiten, um es prägnanter zu machen. –

Antwort

0

Der Vergleich wird nicht funktionieren, da sie nicht das gleiche Objekt sind, dies vergleicht Referenzen nicht Objekteigenschaften. Während Sie die Bilder Pixel für Pixel vergleichen können, die etwas übertrieben sind, würde ich wahrscheinlich vorschlagen, den Zustand der Schaltfläche entweder in einer vorhandenen Schaltflächeneigenschaft zu speichern oder die Schaltfläche in Ihre eigene Klasse mit zusätzlichen Informationen zu erweitern (mit Komposition oder Erbe).

----- ----- EDIT

Sie könnten Zustand in den Knopf durch Vererbung hinzufügen, das heißt:

public class MyButtonWithState : Button 
{ 
    public int ButtonState { get; set; } 
} 

Sie können dann instanziiert Ihre Tasten MyButtonWithState mit anstatt nur Taste .

public Form1() 
{ 
    InitializeComponent(); 

    MyButtonWithState NewButton = new MyButtonWithState(); 
    NewButton.Text = "My Test Button"; 
    NewButton.ButtonState = 3; 
    this.Controls.Add(NewButton); 
} 

Wenn Sie dies zur Entwurfszeit zur Verfügung haben möchten, gibt es ein bisschen mehr zu tun, aber dies sollte Ihnen die Grundidee geben.

+0

Ich habe Ihnen eine positive Bewertung gegeben, weil ich gelernt habe, dass es Referenzen und nicht das Objekt selbst vergleicht. Aber ich weiß jetzt nicht, wie ich die Bilder vergleichen soll. Wie kann ich den Status der Schaltfläche einstellen, ohne die Bilder zu vergleichen? Ich müsste den Anfangszustand von irgendwo herbekommen. –

+0

In Bezug auf edit: Yeah dachte ich an so etwas. Es ist ein bisschen übertrieben für das, was ich erreichen möchte. –

+1

Im Vergleich zu einem Pixel-zu-Pixel-Vergleich der Bilder (Ihre einzige andere Option glaube ich), denke ich, dass es viel, viel leichter und schneller ist. Sie könnten den ButtonState zu einem String machen und den Namen der Ressource speichern, die Sie als Alternative geladen haben, aber ich sehe dort keinen großen Nutzen. Am Ende des Tages müssen Sie sich mit dem Code nicht ich wohl fühlen :) – Lazarus

1

Sie müssen die Referenzen speichern, damit Sie sie später vergleichen können. Etwas wie:

Bitmap top = Properties.Resources.buttonTopSelected; 
    Bitmap bottom = Properties.Resources.buttonBottomSelected; 
    ... 
     borderTop.BackgroundImage = top; 
    ... 
     if (borderTop.BackgroundImage == top) { 
      // etc.. 
     } 

Vergessen Sie nicht, sie in der Dispose() Methode des Formulars zu entsorgen.

+0

Denkst du, dass es eine gute Idee ist, den Status im BackgroundImage zu speichern? Das Hinzufügen einer anderen Eigenschaft verstößt möglicherweise gegen das DRY-Prinzip, da State effektiv durch BackgroundImage angegeben wird. Hmm .... hab mich jetzt nachgedacht, riecht immer noch schlecht aber das darf nur ich sein :) – Lazarus

Verwandte Themen