Avatar billede kamak Praktikant
26. september 2005 - 18:41 Der er 14 kommentarer og
1 løsning

usynliggørelse af labels bliver ikke updateret korrekt.

Jeg har problemer med et program. Jeg giver et eksempel på problemet her:

På et tidspunkt eksekveres følgende kode hvor lbl1 lbl2 ... lbl5 er labels.

lbl1.Visible = true;
lbl1.Update();
Thread.Sleep(300);
lbl1.Visible = false;
lbl1.Update();

lbl2.Visible = true;
lbl2.Update();
Thread.Sleep(300);
lbl2.Visible = false;
lbl2.Update();

lbl3.Visible = true;
lbl3.Update();
Thread.Sleep(300);
lbl3.Visible = false;
lbl3.Update();

lbl4.Visible = true;
lbl4.Update();
Thread.Sleep(300);
lbl4.Visible = false;
lbl4.Update();

lbl5.Visible = true;
lbl5.Update();
Thread.Sleep(300);

Det er meningen at først skal test1 vises i 300 milisekunder, så skal lbl1 fjernes og lbl2 skal vises i 300 milisekunder osv. Men det der sker, er at de ikke fjernes (gøres usynlige) efterhånden. Først til allersidst når koden er færdig bliver de fire første labels usynlige. Det er ligemeget om jeg bruger update() eller refresh(). Det er som om lbl.Visible = false; altid først udføres tilsidst.
Det er meget mærkeligt og meget frustrerende...
Håber nogen kan hjælpe.
Avatar billede nielle Nybegynder
26. september 2005 - 18:55 #1
Det må være noget andet som går galt - ovenstående kode virker nemlig fint hos mig.
Avatar billede kamak Praktikant
26. september 2005 - 18:58 #2
kan det være fordi min computer er for langsom til at updatere rigtigt?
Avatar billede kamak Praktikant
26. september 2005 - 18:59 #3
man skal kun kunne se en labels ad gangen - men hos mig kan man se alle sammen før de fire første tilsidst fjernes.
Avatar billede nielle Nybegynder
26. september 2005 - 19:03 #4
Selv den sløveste PC burde nu kunne klare det uden problemer.

Hvad sker der hvis du sætter Visible til at være false fra starten af?
Avatar billede kamak Praktikant
26. september 2005 - 19:07 #5
Det er det jeg har gjort. Det glemte jeg at sige - sorry
Avatar billede kamak Praktikant
26. september 2005 - 19:10 #6
De der labels simulere en brik der flytter sig. De har en anden farve en baggrunden. Jeg har fundet ud af at jeg kan løse problemet ved at give dem samme farve som baggrunden istedet for at gøre dem usynlige.

lbl1.Visible = true;
lbl1.Update();
Thread.Sleep(300);
lbl1.BackColor = Color.FromArgb(192,192,255);
lbl1.Update();

lbl2.Visible = true;
lbl2.Update();
Thread.Sleep(300);
lbl2.BackColor = Color.FromArgb(192,192,255);
lbl2.Update();

Det er som om at operationen med at gøre dem usynlige er tungere ind blot give dem en anden baggrundsfarve. Nu opdateres de korrekt. Men dette er bare en grim løsning - og jeg vil stadig gerne fiinde ud af det andet.
Avatar billede nielle Nybegynder
26. september 2005 - 19:24 #7
Det virker som sagt fint hos mig. Måske har du en anden process kørende som bruger al processor-kraften sådan st opdateringen ikke får tid nok?

Hvad sker der hvis du laver en lille prøve-app hvor du kun har dine labels og ikke noget andet?
Avatar billede kamak Praktikant
26. september 2005 - 19:31 #8
Underligt - Hvis jeg laver en lille mini-test-applikation så virker det præcist som det skal. Men ikke over i min forholdsvis mellem-store applikation.
Avatar billede nielle Nybegynder
26. september 2005 - 19:33 #9
Umiddelbart vil jeg gætte på at der er en tråd som tager alle resourcerne uden at lade opdateringen komme til.
Avatar billede polle007 Nybegynder
26. september 2005 - 19:36 #10
Avatar billede kamak Praktikant
26. september 2005 - 19:49 #11
Bingo...

Det her kode virker:

lbl1.Visible = true;
lbl1.Update();
Thread.Sleep(300);
lbl1.Visible = false;
lbl1.Update();
Application.DoEvents();

lbl2.Visible = true;
lbl2.Update();
Thread.Sleep(300);
lbl2.Visible = false;
lbl2.Update();
Application.DoEvents();

lbl3.Visible = true;
lbl3.Update();
Thread.Sleep(300);
lbl3.Visible = false;
lbl3.Update();
Application.DoEvents();

lbl4.Visible = true;
lbl4.Update();
Thread.Sleep(300);
lbl4.Visible = false;
lbl4.Update();
Application.DoEvents();

lbl5.Visible = true;
lbl5.Update();
Thread.Sleep(300);

Meget underholdende artikel iøvrigt - og så var løsningen der. Tak til jer begge to for hjælpen.
Avatar billede kamak Praktikant
26. september 2005 - 19:52 #12
Hvis i begge to laver et svar deler jeg pointene mellem jer.
Avatar billede nielle Nybegynder
26. september 2005 - 20:12 #13
Ok, men de fleste point skal vist gå til polle007. :^)
Avatar billede nielle Nybegynder
18. oktober 2005 - 22:36 #14
polle007?
Avatar billede kamak Praktikant
20. oktober 2005 - 16:15 #15
polle007 vil åbenbart ikke have nogle point så du får dem alle sammen...
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