Avatar billede macpain Nybegynder
03. oktober 2004 - 19:48 Der er 9 kommentarer og
1 løsning

Problem med ArrayList

Jeg kæmper med et lille problem der drejer sig om at når jeg gentegner på min form(ved flere tegninger) får jeg en fejl. Der siger at det ikke er muligt at lave et sådanne cast men hvis jeg kun laver en tegning er der ikke nogen problemer.

Fejlen bliber præsenteret ved den sidste tuborg-klamme({)

Som i kan se hedder mit ArrayList myAL.
Der hvor jeg tegner, er i 3 forskellige klasser der alle nedarver fra en abstract klasse GraphicObject med en funktion der tegner.

Programmet kan køre hvis jeg sætter myAL.Clear ind. Og tegne alle fra alle 3 klasser.

Main/OnPaint procedure er som følgende(uddrag af program):
static void Main()
        {
            Application.Run(new Form1());
        }
   
        protected override void OnPaint(PaintEventArgs pea)
        {
            Graphics gfx = pea.Graphics;

            //foreach(ArrayList al in myAL)
            for(int i = 0; i < myAL.Count; i++)
            {
                SetPoints sp = new SetPoints();
                go = (GraphicObject) myAL[i++];
                sp =  (SetPoints)myAL[i++];
                go.Draw(gfx,sp);
            }
            //myAL.Clear();
        }
Avatar billede snepnet Nybegynder
03. oktober 2004 - 19:52 #1
Du tæller i op to gange her - det er vel ikke meningen eller ?

go = (GraphicObject) myAL[i++];
sp =  (SetPoints)myAL[i++];
Avatar billede macpain Nybegynder
03. oktober 2004 - 19:55 #2
Jo jeg ligger 2 objekter ind. En til at holde kordinaterne(en struct med to Point objekter) og objektet der skal tegnes.
Kan det evt. hjælpe hvis jeg ligger hele koden ind?
Avatar billede snepnet Nybegynder
03. oktober 2004 - 20:03 #3
hvis din forudsætning er at dine typer ligger sådan her i dit array :

myAl[0] is type1
myAl[1] is type2
myAl[2] is type1
myAl[3] is type3
osv..

Så vil det jo kikse når du for hver runde får lagt 3 til i... (du lægger både til i løkken, og hvor hver gang du spørgen på den).

mvh
Avatar billede snepnet Nybegynder
03. oktober 2004 - 20:06 #4
er du gal hvor kan jeg dog ikke skrive... der skulle have stået :
Så vil det jo kikse når du for hver runde får lagt 3 til i... (du lægger både til i løkken, og hver gang du spørger på den).
Avatar billede macpain Nybegynder
03. oktober 2004 - 20:08 #5
Arhhh fuck hvor dum kan man være, og det kørte jeg igennem slavisk...pis.
Men pointene er dine...Det virkede

Bare kom med et svar.... :-)
Avatar billede snepnet Nybegynder
03. oktober 2004 - 20:08 #6
ok :o)
Avatar billede macpain Nybegynder
03. oktober 2004 - 20:08 #7
go = (GraphicObject) myAL[i++];
sp =  (SetPoints)myAL[i];

Er hvad jeg gør nu
Avatar billede snepnet Nybegynder
03. oktober 2004 - 20:13 #8
jamen så skulle den jo også holde :o)
Avatar billede erikjacobsen Ekspert
03. oktober 2004 - 20:15 #9
Alterntivt kan du nøjes med at rette
    for(int i = 0; i < myAL.Count; i++)
til
    for(int i = 0; i < myAL.Count;)
og beholde de to i++ i arrayopslagene. Det vil gøre det lidt tydeligere for mig hvad der sker ;)
Avatar billede arne_v Ekspert
03. oktober 2004 - 21:02 #10
Eller:

            for(int i = 0; i < myAL.Count/2; i++)
            {
                ...
                go = (GraphicObject) myAL[2*i];
                sp =  (SetPoints)myAL[2*i+1];
                ...
            }
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