Vinnaren i pepparkakshustävlingen!
2016-05-29, 14:20
  #1
Medlem
Hej försöker få en picturebox i windows form och känna igen vilken bild som är på den, just nu så har jag gjort såhär:

Kod:
if (pictureBox1.Image == Properties.Resources.SPmorph1)
            {
                pic1 = true;
            }
sedan så tänkte jag dra en sån här så att när alla bilder är på rätt plats så ska applikationen stängas
Kod:
if (pic1 && pic2 && pic3 && pic4 && pic5 && pic6 && pic7 && pic8 && pic9 == true)
            {
                isPressed = false;
                isShowing = true;
                Application.Exit();
            }

Problemet är att i den första biten kod jag skrivit så reagerar inte boolen till if-satsen så den blir aldrig true. Vet verkligen inte hur jag kan få bilderna och pictureboxes att veta när dom är på rätt plats. Snälla hjälp.
Citera
2016-05-29, 15:54
  #2
Medlem
Du skriver att första biten aldrig reagerar, så boolen blir inte true? Då blir inte din if-sats true alltså, du bör kolla vad pictureBox1.Image returnar (testa sätt ut en textbox, så sätter du denna boxens värde till pictureBox1.Image, gör sedan samma sak för Properties.Resources.SPmorph1, troligtvis är dessa värden ej jämförbara.

Sen till if-sats nummer två, din == true på slutet är fullkomligt värdelös, du behöver ej kolla om det är likamed true när du skriver i en ifsats, booleans kan man skriva rakt ut (så förstår programmet att det ska kolla == true själv.

Men somsagt, kika vad du får för värden på dina variabler i första if-satsen, sen kommer du tillbaka med ditt resultat.
Citera
2016-05-29, 16:21
  #3
Medlem
Hmm, lite kluven på första biten, det med textboxen , hur sätter jag boxens värde till pictureBox1.Image?

Okej så den säger att picureBox1.Image = System.Drawing.Bitmap
__________________
Senast redigerad av WhiteBuffalo 2016-05-29 kl. 16:26.
Citera
2016-05-29, 20:29
  #4
Medlem
John-Pauls avatar
Debug it man!
Sätt en breakpoint på if (pictureBox1.Image == Properties.Resources.SPmorph1) och se om den ger ger dig förväntat resultat, om inte så tar du redan på orsaken genom att inspektera objekten.
Citera
2016-05-29, 21:41
  #5
Medlem
tantrs avatar
Citat:
if (pic1 && pic2 && pic3 && pic4 && pic5 && pic6 && pic7 && pic8 && pic9 == true)
{
isPressed = false;
isShowing = true;
Application.Exit();
}


Du kollar endast om pic9 är true i detta fallet.

Sätt pic1==true, pic2==true... osv...

Edit:

Såg att det var C#

I C ++ vet jag att man är tvungen att skriva som jag gjort ovan, och i Java inte. Dock vet jag inte vad som gäller för C#.

Hursomhelst... Så kan du inte skriva "==true" i slutet av din if sats för att kolla om alla variabler är "true". Utan du måste kolla var och en av variablerna.

För att se om en variabel i Java har värdet sant: if(variabel). Medans i C++ måste man skriva if(variabel == true).
__________________
Senast redigerad av tantr 2016-05-29 kl. 21:52.
Citera
2016-05-30, 10:10
  #6
Medlem
Citat:
Okej så den säger att picureBox1.Image = System.Drawing.Bitmap

Precis! Då om du kollar vad Properties.Resources.SPMorph1 ger för resultat så är jag ganska säker på att det inte är samma sak, detta innebär att du inte kan kolla såhär:

Kod:
if (pictureBox1.Image == Properties.Resources.SPmorph1)
            {
                pic1 = true;
            }

Utan du får komma på ett annat sätt att "jämföra" ifall det är korrekt bild.


Citat:
I C ++ vet jag att man är tvungen att skriva som jag gjort ovan, och i Java inte. Dock vet jag inte vad som gäller för C#.

I C# räcker det med att skriva booleans direkt i if-satsen, annars hade det varit rätt att han bara kollar den sista!
Citera
2016-05-30, 19:34
  #7
Medlem
Bitmap är Image.

Citat:
Image Class
An abstract base class that provides functionality for the Bitmap and Metafile descended classes.

Kod:
public sealed class Bitmap : Image

Sen, om du kollar Bitmap class på MSDN så står det så:

Kod:
Equals(Object)

Det finns ingen overload som tar Bitmap/Image in. Det betyder säkert Reference equality. I andra ord, du jämför inte bilder, du kollar om de pekar på samma objekt.

Plus, om inte "==" är overloaded (går säkert att kolla på github) så är den också på referensjämförelsen.

Så testa jämföra på andra properties. Typ Size eller Width, Height.

Eller köra med MemoryStream & Co. Typ spara bitmap i memoryStream och sen convert till ToBase64String och jämföra strings.
Citera
2016-05-31, 20:25
  #8
Medlem
John-Pauls avatar
Alternativt kanske du kan prova att hålla reda på vilken bild som väljs till vilken textbox genom att åsätta varje bild ett nummer och använda ett Dictionary, eller genom att använda List'or
Citera
2016-06-21, 13:10
  #9
Medlem
Soluss avatar
Citat:
Ursprungligen postat av tantr
Du kollar endast om pic9 är true i detta fallet.

Sätt pic1==true, pic2==true... osv...

Edit:

Såg att det var C#

I C ++ vet jag att man är tvungen att skriva som jag gjort ovan, och i Java inte. Dock vet jag inte vad som gäller för C#.
Du har både rätt och fel. Du har rätt såtillvida att man måste göra jämförelse på alla variabler, du har fel såtillvida att det räcker att skriva if(pic1). När du kastar in en boolean i en if-sats behöver du inte jämföra den med något, då en sådan jämförelse resulterar just i en boolean, vilket är vad du vill ha i en if-sats.


Kod:
if (pic1 && pic2 && pic3 && pic4 && pic5 && pic6 && pic7 && pic8 && pic9)
Så hade jag skrivit det.

/red. Missade att detta redan kommenterats i tråden. Sorry. Hur som helst så är det pic1 osv som aldrig blir true.
__________________
Senast redigerad av Solus 2016-06-21 kl. 13:13.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback