Gå til innhold

C#: [Løst] [Hjelp] Hvordan lage auto refresher ned timer?


Anbefalte innlegg

Hei =)

Jeg holder på å lage en "Auto Refresher" i C# som sjer slik ut:

http://imageshack.us/photo/my-images/215/autorefresher.png/

 

Dette er på den:

Start - Stop Knapp

WebBrower

Timer

 

Hvordan kan jeg gjøre det når jeg trykker på Start-knappen (Button1) refresher den hvert 5. secund, og når jeg trykker på "Stop" knappen (Button2) stopper den?

 

Hjelp?

 

Dette er min Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AutoRefresher
{
   public partial class Form1 : Form
   {
 public Form1()
 {
   InitializeComponent();
 }
   }
}

 

EDIT: Den skal brukes til å refreshe ett spill... ( Sikkert ikke noe dere trenger å vite :!: )

Endret av Okaza
Lenke til kommentar
Videoannonse
Annonse

Har du sett på dokumentasjonen for Timer? Det bør få deg igang.

 

Lag en OnClick handler for hver knapp (ved å dobbeltklikke på knappene), og sett timer.enabled til true og false i henholdsvis start- og stopp-knappenes handlere. Og så må du knytte opp en eventhandler til timeresn Tick-event som kjører refresh på webbrowseren.

Hmm... jeg får den ikke til å virke... dette er Form1.cs:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AutoRefresher
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
           timer1.Start();
       }

       private void button2_Click(object sender, EventArgs e)
       {
           timer1.Stop();
       }
   }
}

Lenke til kommentar

Jeg ser ikke at du knytter opp noen eventhandler til Tick-eventet der. Altså, selv om du får timeren til å starte så har den ikke noe å gjøre på, for å si det sånn.

Eventhandling? Det har jeg aldri vært borti før...

Eventhandling er å binde et event mot en funksjon. Du har allerede gjort det to ganger, med hver av knappene.

 

All koden for event-binding er skjult inne i InitializeComponent(), men kan se noe slikt ut:

 

button1.Click += new EventHandler(button1_Click);

Lenke til kommentar

Jeg ser ikke at du knytter opp noen eventhandler til Tick-eventet der. Altså, selv om du får timeren til å starte så har den ikke noe å gjøre på, for å si det sånn.

Eventhandling? Det har jeg aldri vært borti før...

Eventhandling er å binde et event mot en funksjon. Du har allerede gjort det to ganger, med hver av knappene.

 

All koden for event-binding er skjult inne i InitializeComponent(), men kan se noe slikt ut:

 

button1.Click += new EventHandler(button1_Click);

så koden blir slik da:

 

        private void button1_Click(object sender, EventArgs e)
       {
           timer1.Start();
           button1.Click += new EventHandler(button1_Click);
       }

Endret av Okaza
Lenke til kommentar

Jeg ser ikke at du knytter opp noen eventhandler til Tick-eventet der. Altså, selv om du får timeren til å starte så har den ikke noe å gjøre på, for å si det sånn.

Eventhandling? Det har jeg aldri vært borti før...

Eventhandling er å binde et event mot en funksjon. Du har allerede gjort det to ganger, med hver av knappene.

 

All koden for event-binding er skjult inne i InitializeComponent(), men kan se noe slikt ut:

 

button1.Click += new EventHandler(button1_Click);

så koden blir slik da:

 

        private void button1_Click(object sender, EventArgs e)
       {
           timer1.Start();
           button1.Click += new EventHandler(button1_Click);
       }

Hva? button1.Click er allerede bundet til button1_Click. Bare dobbeltklikk på timeren din i Form designeren.

Lenke til kommentar

Vil igjen minne om linken til dokumentasjonen som jeg postet tidligere. Du må LESE DEN for å se hvordan du skal bruke timeren! Alt om hvordan du knytter opp en eventhandler forklares der.

Jeg har nå leste gjennom den men forstår ikke hva jeg må gjøre...

Lenke til kommentar

Vil igjen minne om linken til dokumentasjonen som jeg postet tidligere. Du må LESE DEN for å se hvordan du skal bruke timeren! Alt om hvordan du knytter opp en eventhandler forklares der.

Jeg har nå leste gjennom den men forstår ikke hva jeg må gjøre...

 

float time = 0.0f;

...

void Initialize()
{
timer1.Elapsed += new EventHandler(timer1_Elapsed);
timer1.Start();
}

...

void timer1_Elapsed(object sender, EventArgs e)
{
time++;
Console.WriteLine("timer1 har nå sendt et event og denne funksjonen handlet det");
}

 

Dette er kun eksempel kode, men det burde gi en ide om hvordan det funker... Denne koden vil øke time for hver gang timer1 sender et event.

 

Du kan legge til flere funksjoner på en event property, siden event propertien (f.eks Button.Click, Timer.Elapsed) er en liste over funksjoner (event handlers) som kalles på hver gang det sendes ut et event fra objektet. Hvis du ser i Initialize() i koden min så legger jeg til en ny funksjon med += operatoren.

 

Så Timer er egentlig en klasse som kaller en funksjon (eller flere funksjoner) med et visst interval.

 

PS: Event handlers har alltid funksjon signaturen void handler(object sender, EventArgs e)... Funksjon signatur vil si hvilken retur type og hvilke parametere en funksjon har.

Endret av Heksesang
Lenke til kommentar

Vil igjen minne om linken til dokumentasjonen som jeg postet tidligere. Du må LESE DEN for å se hvordan du skal bruke timeren! Alt om hvordan du knytter opp en eventhandler forklares der.

Jeg har nå leste gjennom den men forstår ikke hva jeg må gjøre...

 

float time = 0.0f;

...

void Initialize()
{
timer1.Elapsed += new EventHandler(timer1_Elapsed);
timer1.Start();
}

...

void timer1_Elapsed(object sender, EventArgs e)
{
time++;
Console.WriteLine("timer1 har nå sendt et event og denne funksjonen handlet det");
}

 

Dette er kun eksempel kode, men det burde gi en ide om hvordan det funker... Denne koden vil øke time for hver gang timer1 sender et event.

 

Du kan legge til flere funksjoner på en event property, siden event propertien (f.eks Button.Click, Timer.Elapsed) er en liste over funksjoner (event handlers) som kalles på hver gang det sendes ut et event fra objektet. Hvis du ser i Initialize() i koden min så legger jeg til en ny funksjon med += operatoren.

 

Så Timer er egentlig en klasse som kaller en funksjon (eller flere funksjoner) med et visst interval.

 

PS: Event handlers har alltid funksjon signaturen void handler(object sender, EventArgs e)... Funksjon signatur vil si hvilken retur type og hvilke parametere en funksjon har.

Dette er vanskelig å forstå for en 16år gammel gutt, som ikke har holdt på med C# så mye

Lenke til kommentar

Heksesang gav deg nesten løsningen. Hvis du bytter du innholdet i timer1_elapsed med koden som refresher WebControlen så skal du være i mål.

Ja, det refresher nå, men ikke når jeg trykker på knappen, det refresher hvert 5'te sekund...

 

dette er koden:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AutoRefresher
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
           timer1.Start();
       }

       void timer1_Elapsed(object sender, EventArgs e)
       {
           webBrowser1.Refresh();
       }

       private void button2_Click(object sender, EventArgs e)
       {
           timer1.Stop();
       }

       private void timer1_Tick(object sender, EventArgs e)
       {
           webBrowser1.Refresh();
       }
   }
}

Lenke til kommentar

Hvis den refresher hvert 5. sekund, så er det fordi timer1 sin interval er satt til 5000 ms.

ja, den er det... men hvorfår refresher den ikke etter jeg har trykket på "Start" ? når jeg starter programmet begynner den å refreshe... ka du se på koden jeg postet før denne og se hva jeg har gjort galt?

Lenke til kommentar

Kanskje du har satt timer1.Enabled til true? Den skal stå på False hvis timeren ikke skal starte med engang.

 

Å sette timer1.Enabled til true er synonymt med timer1.Start(); og likeledes å sette timer1.Enabled til false er synonymt med timer1.Stop();

Ops xD, takk skal du ha :!:

 

Og tusen takk til alle dere andre som har hjulpet meg =)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...