19. november 2007 - 15:26Der er
15 kommentarer og 1 løsning
Skift billede med onClick event
Halløj..
Jeg skal have lavet et click event på nogle billeder, der er kodet ind i mit system.
Da de som sagt er -kodet- ind, kan jeg ikke bare dobbeltklikke på dem og udføre et event.
Det der skal ske er at når jeg klikker på billedet, skal billedet gerne skiftes ud med et andet.
Fx hvis vi siger vi har 4 billeder hvor der på hvert billede er et tal. fx 1 - 2 - 3 - 4, og jeg klikker på fire, så skal billede 4 skiftes ud med et andet. Klikker jeg derefter på 2 istedet, skal billede 4 skiftes ud til det gamle igen og billede 2 skal istedet have et nyt billede.
Altså så man highlighter det valg man har foretaget ud af de 4 valgmuligheder.
Hvordan laver jeg et sådan click event på et billede der er KODET ind og ikke trukke vha. visual studio?
På en eller anden måde skal jeg også have skrevet mine valg ned i en variabel, så jeg kan gemme dem i mit system.
Problemet er at jeg ikke ved præcist hvor mange spørgsmål jeg bliver stillet. Dvs. jeg kan sagtens få 5 forskellige spørgsmål hvor jeg skal vælge mellem 1,2,3 og 4.
Du laver en metode der passer til det du havde skrevet normalt, og så tildeler du den til onClick-eventet på dine billeder når du opretter dem. Med andre ord: skriv koden så den passer til et fast billede, lav om så den går gennem sender-parameteren, og tildel eventet ved oprettelse.
Tallene kan evt. få tildelt billedets komponent til deres Tag-property, så du gennem den property og sender-parameteren kan få fat på det rigtige billede.
Mht. at gemme dine valg, så kan jeg ikke sige hvordan du præcist skal håndtere det, da jeg ikke ved nok om dit system.
Nu fik jeg det til at køre med at billedet bliver skiftet ud når jeg trykker på det.. Men hvordan får jeg den til at skifte de 3 andre billeder i samme række ud?
Har forsøgt mig lidt med at sætte tag lig med billedeNummeret-rækkenummeret.. Så fx billede 2 i række 3 ser sådan ud: 2-3
Når jeg så trykker på et billede bruger jeg substring til at skille de to tal fra hinanden.. Så ved jeg hvilket billede der er blevet trykket på og på hvilken række det stod.
Men det i sig selv hjælper mig jo ikke med at gøre det muligt at ændre billede på de 3 andre billeder. Jeg har jo kun adgang til selve senderobjektet.
----
Hvad angår det med at gemme mine valg.. er der noget specielt du skal vide, for at du kan give et svar på det?
Jeg kan sige at det er en List<> af strings der bliver gennemgået og for hver string der er i den liste bliver der tilføjet en tekst og de 4 billeder på en række.
Brugeren skal så for hver række kunne vælge et af de numre, derfor skal billedet skiftes ud når man klikker på dem, med et highlightet billede, så man kan se hvad der er blevet klikket på, og fortryder man sit valg og klikker på en anden, skal den nye blive highlightet og det tidligere valg skal ændres til normal tilstand.
Det er op til brugerens indstillinger hvor mange strenge den indeholder, der vil typisk højest være 5 eller 6 rækker på en side. Men systemet må meget gerne være fleksibelt, så vi er fremtidssikret mod at det på et tidspunkt bliver muligt med flere strenge.
Performance er i øvrigt også vigtig faktor der skal tænkes på.
Systemet udvikles til Windows Mobile 6 Classic.. Dvs. på compact framework.
(Bemærk jeg ike har arbejdet med CF - så kan ske jeg finder på noget der ikke er tilgængeligt)
Det bedste at gøre er nok at have lister over grupperne af billeder. Du kan så finde frem til den liste der indeholder den gruppe der blev klikket på, "nulstille" billederne, og så til sidst sætte den relevante picturebox.
Ud fra det du siger, kunne jeg forestille mig at du med fordel kan lave en klasse der indeholder de relevante billedestier, reference til dine billedkomponentinstanser, et tal der angiver valget, samt evt. andre oplysninger (eks. den tekst du nævner); og så har en instans af den pr. sæt. Du kan jo optimere en smule ved at nulstille det gamle valg inden du overskriver det, så det kun er de to billeder der bliver ændret på.
Altså hvis vi skal oversætte det du lige foreslog til c# skal jeg der hvor jeg gennemløber mine spørgsmål oprette en List<> af Pictureboxes for hver række der bliver oprettet..
Og navngive den efter hvilket rækkenummer den har. Når der klikkes på et billede, skal jeg gennemløbe billederne i den liste og sætte dem alle til det ikke highlightede billede undtagen den jeg har klikket på, Den skal self. sættes til det hightlightede.
Min liste af tekster er i forvejen en jeg kalder ind fra en anden klasse, så den modificere jeg lidt, så den indeholder tekst, og besvarelse. Når en bruger klikker på et billede gennemløber jeg min collection klasse der indeholder teksten og finder det rette objekt og retter besvarelsen.
jeg kan slet ikke navngive nogle former for arrays..
Men hvad hvis man nu lavede en klasse der indeholder en Picturebox, et rækkenummer og en bool isActivated.
Så i min form hvor jeg opretter de forskellige Controls har jeg én stor liste af den førnævnte klasse.
Så for hvert billede jeg smider ind opretter jeg et objekt af klassen og smider i min liste.
Når der så klikkes kører jeg en foreach løkke og finder den smiley i den række, som er aktiveret og deaktivere den og ændre billedet på den og til sidst ændre billedet på sender og sætter den til activated.. Ville det mon være en holdbar løsning?
Det er bestemt en mulighed. En anden var måske at i din gruppering at have en ekstra variabel der peger på den instans der er aktiv - det kommer nok i sidste ende lidt ud på et, men uden videre kendskab til dit program ved jeg jo ikke hvad der egner sig bedst - der er jo flere måder at løse et problem på, og det er ikke altid man kan sige at kun en af dem er rigtig.
Det er jo, igen, her Tag kommer ind i billedet. Hvis du, som du selv er inde på, laver en klasse som Pictureboxen ligger inde i, så kan den instans den enkelte PictureBox hører til jo bruges som Tag, så du kan tilgå ad den vej.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.