Avatar billede lasse37 Nybegynder
15. juni 2006 - 08:53 Der er 11 kommentarer og
1 løsning

Lytte til event

Jeg forsøger at lave et lille program i visual studio med en form og to knapper. en start og stop knap. når man trykker start skal en tæller som visualiseres ved en label tælles op. stop knappen reagerer først når tællerlykken er færdig, op det skal den ikke. hvad kan jeg gøre for at min stop knap skal reagere med det samme.?
Avatar billede nielle Nybegynder
15. juni 2006 - 08:54 #1
VB.Net eller C#?
Avatar billede lasse37 Nybegynder
15. juni 2006 - 08:55 #2
C#
Avatar billede bitsch Nybegynder
15. juni 2006 - 08:56 #3
Prøv at kigge lidt på BackgroundWorker klassen. Den er oplagt til et sådant formål.
Avatar billede spif2001 Nybegynder
15. juni 2006 - 09:03 #4
en simpel fremgangsmåde ville være at have en global bool på formklassen som du kan sætte til false når du trykker stop. og så bruge den i en while løkke - a la:

class Form
{
  private bool run = true;

  buttoneventhandler1()
  {
    while(this.run)
    {
        tæl op
    }
  }

  buttoneventhandler2()
  {
    this.run = false;
  }
}
Avatar billede lasse37 Nybegynder
15. juni 2006 - 09:12 #5
hm, joo... men jeg tænkte nu mere på en button event listner. problemet er jo at når programmer køre i løkken, reagere den overhovedet ikke på input på knappen..
Avatar billede nielle Nybegynder
15. juni 2006 - 09:19 #6
namespace e715542
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
            this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
            this.backgroundWorker1.WorkerSupportsCancellation = true;

            this.button2.Enabled = false;
        }

        void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int tæller = 1; tæller < 1000000; tæller++)
            {
                if (this.backgroundWorker1.CancellationPending) break;

                this.label1.Text = tæller.ToString().PadLeft(6, '0');
            }
        }

        void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.button1.Enabled = true;
            this.button2.Enabled = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.button1.Enabled = false;
            this.button2.Enabled = true;


            this.backgroundWorker1.RunWorkerAsync();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.backgroundWorker1.CancelAsync();

            this.button1.Enabled = true;
            this.button2.Enabled = false;
        }
    }
}
Avatar billede nielle Nybegynder
15. juni 2006 - 09:28 #7
Button-events, ja events i det hele taget, bør indeholde så lidt kode som muligt.

F.eks. er det ikke tilrådeligt at lægge en tæller ind som blokere programmet indtil at den er løbet færdigt.
Avatar billede lasse37 Nybegynder
15. juni 2006 - 11:10 #8
ok, det ser interessant ud. :-) og nej, men der er undtagelser hvor det kan være en fordel... kigger lige på det..
Avatar billede lasse37 Nybegynder
17. juni 2006 - 11:56 #9
nielle, læg et svar så du kan få point...
Avatar billede nielle Nybegynder
17. juni 2006 - 12:00 #10
Svar :^)
Avatar billede nielle Nybegynder
22. juni 2006 - 21:23 #11
Så mangler du bare at acceptere svaret :^)
Avatar billede nielle Nybegynder
26. juli 2006 - 18:20 #12
Takker for point :^)
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
Kurser inden for grundlæggende programmering

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