Avatar billede vivaa.dk Nybegynder
19. november 2007 - 15:26 Der 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?
Avatar billede vivaa.dk Nybegynder
19. november 2007 - 15:31 #1
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.
Avatar billede pidgeot Nybegynder
19. november 2007 - 15:34 #2
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.
Avatar billede vivaa.dk Nybegynder
20. november 2007 - 19:59 #3
Ok..

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.
Avatar billede pidgeot Nybegynder
20. november 2007 - 20:46 #4
(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å.
Avatar billede vivaa.dk Nybegynder
20. november 2007 - 23:50 #5
Ok.

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.

Har jeg forstået korrekt?
Avatar billede roenving Novice
21. november 2007 - 00:01 #6
-- er det nødvendigt at det laves serverside ?-)

-- det lyder lidt som om en del af arbejdet med fordel kan laves på klienten, hvilken slags netværk skal det køre over ?o]
Avatar billede vivaa.dk Nybegynder
21. november 2007 - 08:37 #7
Serverside? Har ikke snakket om serverside.. hehe..

Det skal arbejde sammen med en webservice ude på nettet, hvilket ikke har så meget med det her at gøre :)
Avatar billede vivaa.dk Nybegynder
21. november 2007 - 12:50 #8
Hmm jeg kan ikke tilføje et navn på en List :S
Avatar billede pidgeot Nybegynder
21. november 2007 - 13:14 #9
Så kan du vel bruge noget andet end lige List - eks. Hashtable?
Avatar billede vivaa.dk Nybegynder
21. november 2007 - 13:32 #10
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?
Avatar billede pidgeot Nybegynder
21. november 2007 - 13:38 #11
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.
Avatar billede vivaa.dk Nybegynder
21. november 2007 - 15:06 #12
Ok..

Men når jeg prøver at gennemløbe min liste, hvordan finder jeg så frem til den jeg har trykket på, så jeg kan ændre isActivated til true på den?

Min sender er jo pictureboxen, den kan jeg ikke rigtig sammenligne med listen, når de objekter der i er listen er en klasse.
Avatar billede pidgeot Nybegynder
21. november 2007 - 15:10 #13
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.
Avatar billede vivaa.dk Nybegynder
21. november 2007 - 15:24 #14
I mit tag har jeg Nummer og Rækkenummer stående i..

Ahh ja.. Så skal jeg der hvor jeg gennemløber hvilken der skal nulstilles bare finde ud fra rækkenummer og billedenr ændre status der.. ;)

Jeg prøver det lige af og vender straks efter tilbage..
Avatar billede vivaa.dk Nybegynder
26. november 2007 - 14:09 #15
Så er den klaret :) Smid svar for point pidgeot
Avatar billede pidgeot Nybegynder
26. november 2007 - 15:18 #16
S'gerne :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester