Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Buttonclicks worden bewaard

Pagina: 1
Acties:

  • Preau
  • Registratie: Oktober 2010
  • Niet online
Ik ben in C# een Windows Forms applicatie aan het maken.
Dat gaat in principe prima.

Maar als je hem runt, en je drukt op een knop terwijl deze disabled is, dan wordt die click alsnog uitgevoerd zodra de knop enabled wordt.

De drukken worden dus zeg maar opgespaard totdat de knop terugkomt.

Is dit normaal gedrag bij een Windows Forms applicatie en is dit op een of andere manier te voorkomen?
Ik had al gedacht om tijdelijk te knoppen te blokkeren met een onzichtbaar element maar dat is niet zo netjes natuurlijk.

Alvast bedankt.

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 19:16
Ik heb het even geprobeerd maar ik kan dit niet reproduceren (in .net 3.0). Hoe enable en disable je de button?

...


  • dj_vibri
  • Registratie: Oktober 2007
  • Laatst online: 09-11 16:24

dj_vibri

int(e^x) = f(u)^n

Kan dit ook niet reproduceren, evt. wat code die je gebruikt?

Wat ik uit je vraag versta is het volgende: bij runnen applicatie is er een button welke gedisabled is. wanneer je op deze knop probeert te klikken voert hij niets uit. Klik je op een andere knop, die de eerste button enabled wordt de eerste click-event uitgevoerd?

correct?

Dit is hoe ik het heb proberen te reproduceren:

C#:
1
2
3
4
5
6
7
8
9
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(@"Toch geklikt?");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            button1.Enabled = true;
        }


en bij runnen staat button1 gedisabled...

update: hier ook .NET 4.0

[ Voor 85% gewijzigd door dj_vibri op 05-04-2011 13:23 ]

Last night I lay in bed looking up at the stars in the sky and I thought to myself, where the heck is the ceiling.


  • Preau
  • Registratie: Oktober 2010
  • Niet online
Ik enable en disable en enable de button met: button.Enabled = false/true
Als je dan drukt terwijl die op false staat, worden die klikken opgeslagen en zodra ik hem op true zet weer uitgevoerd.

Meer code posten heeft denk ik niet veel zin want elke button heeft andere code en het gebeurt bij allemaal.

Ik gebruik NET4.0 trouwens.

  • Foxpat
  • Registratie: April 2011
  • Laatst online: 20-11 16:32
Dit gebeurt bij mij niet. Ik gebruik ook NET4.0. Ik heb 2 buttons aangemaakt, de ene toggle't Enabled op de 2e button, en de 2e laat een MessageBox zien.

Als ik de 2e disable en ik klik erop gebeurt er zoals verwacht niets. Als ik dan de 2e enable gebeurt er nog steeds niet. Zodra ik op de 2e klik als hij enabled is zie ik een MessageBox. Bij mij is er dus niks aan de hand. Misschien iets vergeten? Geen idee.

C#:
1
2
3
4
5
6
7
8
9
        private void button2_Click(object sender, EventArgs e)
        {
            button1.Enabled = !button1.Enabled;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Test? " + button1.Enabled);
        }


Hij geeft hier alleen Test? true

[ Voor 28% gewijzigd door Foxpat op 05-04-2011 13:25 ]


  • IceM
  • Registratie: Juni 2003
  • Laatst online: 19:16
Ook in .net 4.0 krijg ik dit gedrag niet. Probeer eens te kijken of je hetzelfde gedrag krijgt in een nieuw, leeg project met enkel 2 buttons en een simpele actie onder de button.

...


  • Spiral
  • Registratie: December 2005
  • Niet online
Ben je niet op de achtergrond een intensieve berekening oid aan het uitvoeren. Waardoor je GUI blokkeert en niet de Enabled = false kan uitvoeren omdat hij die methode nog uitvoert. Waardoor het lijkt dat de knop disabled is, maar stiekem nog niet.

zie: http://www.codeguru.com/forum/showthread.php?t=444047

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Kan je een testcase online zetten die wij kunnen downloaden? Graag inclusief een al gecompileerde binary.

Sole survivor of the Chicxulub asteroid impact.


  • dj_vibri
  • Registratie: Oktober 2007
  • Laatst online: 09-11 16:24

dj_vibri

int(e^x) = f(u)^n

Spiral schreef op dinsdag 05 april 2011 @ 13:30:
Ben je niet op de achtergrond een intensieve berekening oid aan het uitvoeren. Waardoor je GUI blokkeert en niet de Enabled = false kan uitvoeren omdat hij die methode nog uitvoert. Waardoor het lijkt dat de knop disabled is, maar stiekem nog niet.

zie: http://www.codeguru.com/forum/showthread.php?t=444047
d:)b mooi denkwerk! :)

Heb ondertussen de meeste events uitgeprobeerd die mogelijk zijn op een button (zoals mousehover, mouseclick etc...) maar geen van allen wordt nadien uitgevoerd :(

Last night I lay in bed looking up at the stars in the sky and I thought to myself, where the heck is the ceiling.


  • Preau
  • Registratie: Oktober 2010
  • Niet online
Spiral schreef op dinsdag 05 april 2011 @ 13:30:
Ben je niet op de achtergrond een intensieve berekening oid aan het uitvoeren. Waardoor je GUI blokkeert en niet de Enabled = false kan uitvoeren omdat hij die methode nog uitvoert. Waardoor het lijkt dat de knop disabled is, maar stiekem nog niet.

zie: http://www.codeguru.com/forum/showthread.php?t=444047
DIt was het inderdaad en de oplossing die daar gegeven is heeft ook gewerkt!
Bedankt Spiral voor de oplossing en de rest voor het meedenken.

  • Spiral
  • Registratie: December 2005
  • Niet online
Tip:
Wellicht kan je die intensieve methode uitvoeren op een aparte thread zodat je GUI daar geen hinder van ondervind. Een relatief simpel component is de BackgroundWorker.

Daar registreer je het event DoWork event, waar je intensieve code laat uitvoeren.
en je registreert het RunWorkerCompleted event. Deze wordt aangeroepen wanneer de code afgerond is.
Daar kan je eventueel je button weer activeren.

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles

Pagina: 1