Avatar billede flyver23 Nybegynder
22. februar 2007 - 10:20 Der er 11 kommentarer og
2 løsninger

Forhindre dobbeltklik i windows form

Hej.
Jeg har lavet en win form, hvorpå der er nogle knapper.
Når brugeren trykke rpå en knap afvikles noget kode.
Hvis brugeren af vane, eller ved et uheld trykker 2 gange afvikles koden 2 gange lige efter hinanden. Det er ikke så godt. Knappen skal dog kunne bruges igen ummidelbart efter første klik. Bare ikke 2 gange hurtigt efter hinanden.
Jeg har forsøgt at disable knappen i et sekund for at forhindre dette, men hvis man dobbeltklikker, huskes det ekstra klik, og koden afvikles igen så snart knappen bliver enabled.
Nogen der har gode løsningsforslag på dette problem?

Vh Flyver23
Avatar billede kalp Novice
22. februar 2007 - 10:25 #1
hvis det kun er en knap det drejer sig om hvorfor fanger du ikke bare dobbeltklik eventet og ikke gøre noget?

hvis ikke så kan du når man trykker på knappen gemme tiden i en global variabel og tjekke på den om der er gået x antal sekunder siden sidste klik.
Avatar billede kalp Novice
22. februar 2007 - 10:26 #2
den globale variabel bør være DateTime..
og du henter tiden ved  System.DateTime.Now
Avatar billede flyver23 Nybegynder
22. februar 2007 - 10:35 #3
Jeg kan ikke finde nogen event der hedder dobbeltklik. Det virker som om programmet fanger 2 enkelt klik i stedet. Jeg har overvejet løsningen med datetime. Vil gerne høre om der er andre løsninger som er indbyggede i C#.
Avatar billede kalp Novice
22. februar 2007 - 10:40 #4
øhm.. hvilken version findes den ikke i?

dinKnap.DoubleClick
Avatar billede kalp Novice
22. februar 2007 - 10:40 #5
måske kigger du i Visual Studio på events der?
ja der kan man nok ikke finde alting:)
Avatar billede dr_chaos Nybegynder
22. februar 2007 - 10:45 #6
måske skal man teste lidt for man siger noget gawi :)
Hvis man bruger:

        void button1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine("sdgsdgsdg");
        }
og
  private void button1_Click(object sender, EventArgs e)
        {
            Button b = sender as Button;
            b.Enabled = false;
            System.Diagnostics.Debug.WriteLine("test");
            //System.Threading.Thread.Sleep(1000);
            b.Enabled = true;
        }

Bliver onclick kørt men ikke dobbeltklik event.
Avatar billede dr_chaos Nybegynder
22. februar 2007 - 10:58 #7
Du kan gøre det på en mere automatiseret måde med en timer:
//onclick event på knap.
private void button1_Click(object sender, EventArgs e)
        {

            Button b = sender as Button;
  //fjern event fra knappen         
b.Click -= button1_Click;
            System.Diagnostics.Debug.WriteLine("test");
//lav en timer
            Timer t = new Timer();
//sæt timer interval til 1 sek
            t.Interval = 1000;
//lav en tick event funktion
            t.Tick += new EventHandler(t_Tick);
//starttimer
            t.Start();
        }

        void t_Tick(object sender, EventArgs e)
        {

            Timer t = sender as Timer;
//udskriv test linie
            System.Diagnostics.Debug.WriteLine("sdgsdgsdg");
//tilføj event til button
            button1.Click += button1_Click;
//disable timer.
            t.Stop();
        }
Avatar billede kalp Novice
22. februar 2007 - 10:59 #8
hvad er test for noget?:) he he

jeg sidder slet ikke med Visual Studio lige nu så kunne ikke teste:)
men som jeg skrev i sidste kommentar så kan man ikke holde sig til de events man kan se i visual studio da der findes mange flere.
jeg huskede så en forkert, men ikke noget man ikke ville finde frem til selv via. intelli-sense:=)
Avatar billede dr_chaos Nybegynder
22. februar 2007 - 11:00 #9
Du kan evt gøre det at efter du har fjernet event sætter du button enable til false og igen til true når du tilføjer event til knap igen.
Avatar billede kalp Novice
22. februar 2007 - 11:15 #10
Jeg synes nu det virker meget pænt med DateTime...

Global.
private DateTime time = DateTime.Now;

I koden.

if(DateTime.Now.CompareTo(time.AddMilliseconds(250)) > 0)
            {
            {
time = DateTime.Now;


og så kan man selv rette på hvor hurtigt man må klikke ved at ændre på 250.
Avatar billede flyver23 Nybegynder
22. februar 2007 - 11:15 #11
Det blev da til en del kode i Dr. chaos eksemplet. Jeg holder mig til løsningen me den global timer. Det er nemt at styre, og virker fint. Det har løst mit problem.
Jeg fandt doubleclick på knappen, men som Chaos skriver var det ikke løsningen.

Tak for hjælpen til jer begge. Jeg vil gerne dele pointene da begge svar har hjulpet med beslutningen.
Vh Flyver23
Avatar billede kalp Novice
22. februar 2007 - 11:24 #12
Fair nok:)

og selv tak;)
Avatar billede dr_chaos Nybegynder
22. februar 2007 - 11:30 #13
svar og np :)
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