Winforms button event

Tags:    c# winforms

<< < 12 > >>
Hej,

Er rimelig ny i winforms, men så spørg endelig hvis det er noget helt volapyk jeg får skrevet.

Jeg har den her form hvor jeg har en start og en stop knap, i selve form koden skal jeg så lave en instans af en klasse så jeg kan kontakte min start og stop metode deri. Men hvordan tilføjer jeg mine metoder til knappernes event click. Jeg tror jeg skal have gang i delegates og events, men hvordan jeg helt præcis får det gjort ved jeg ikke.

Skal min start og stop metode i klassen laves om til events ? kan jo ikke bare bruge knappernes "normale" event handlers, da samme objekt instans skal bruges under hele programmets levetid.

Hvordan får jeg lige det til at virke ?

Mvh



15 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Det er faktisk uhyre nemt.
Du dobbeltklikker på knappen (i præsentationen hvor du grafisk kan se knappen)og så laver visual studio det hele for dig :)
Så det bare at skrive dit kode :)

Hvad er det helt præcist du skal starte og stoppe? Så kan det være nemmere at rådgive med hvordan du gør med dine objekter.



Indlæg senest redigeret d. 22.10.2012 08:30 af Bruger #17215
Når du står i design mode i visual studio, dobbeltklikker du på den knap der skal udføre din handling. Herefter bliver du sendt ned i koden i en eventhandler der automatisk generes til dig. Her skal du lave en instans af din klasse, og så kalde dine start og stop metoder. fx. noget i stil med:

Fold kodeboks ind/udCSharp kode 


Du skal ikke lave noget andet i den klasse der skal kaldes.



Hvis Start knappen skal udføre noget baggrundsarbejde skal du dog udføre noget mere, end bare at instantiere klassen i Click metoden.



Når jeg trykker på start skal objektet udføre et loop indtil jeg trykker på stop eller der ikke er flere emner tilbage i en liste som jeg har i objektet.

Og da jeg skal have 2 click events, ved jeg ikke hvordan jeg kan kontakte den samme instans så jeg kan stoppe det samme loop som jeg har startet :)



Jeg ville gøre noget ala dette på click metoden:

Fold kodeboks ind/udCSharp kode 



Inden du gør det, så tjek om thread objektet allerede eksisterer (Singleton designmønster) og hvis det gør, så stopper du tråden i stedet for at starte den og nedlægger objektet igen.

*edit*

Husk også using System.Threading; i toppen af din cs fil



Indlæg senest redigeret d. 22.10.2012 09:47 af Bruger #9814
Ellers skal du se nærmere på at lave dit objekt som en singleton, for så når du kalder dit objekter i stop metoden vil du altid få samme instance.



Skal man godtnok ud i sådan noget troede det var mere normalt at bygge sin klasse op som "selve" programmet :)



Der er jo "Best practice" omkring opbygningen. Og jeg vil sige at best practice er, at du har din klasse liggende i en selvstændig .cs fil som f.eks. hedder "MinKlasse.cs".

Implementeringen af Singleton som vi snakker om er så:


Fold kodeboks ind/udCSharp kode 


Det betyder at når du instantierer et nyt objekt af klassen MinKlasse, vil den tjekke om der allerede findes et objekt af typen og så bruge den samme.

Så selvom det lyder forvirrende, er det et meget anvendt designmønster. Og at du allerede nu begynder at bruge disse vil du kun blive glad for i fremtiden.






Fx hvis du skal have et objekt der er meget centralt i dit system som skal arbejde med forskellig state på tværs så er det et godt mønster fordi at så kan du altid få den samme instans af objektet.

Hvis fx dit objekt har en liste af andre objekter som du skal kunne redigere i, så vil du altid rette i den samme instans og ikke bare instanciere en ny hver enkelt gang og glemme alt om state på den gamle.



Istedet for at bruge Threading, kan jeg så ikke bare gøre sådan her:

Fold kodeboks ind/udCSharp kode 


får jeg så stadig ikke fat i samme instans(den hvor mit loop kører i) ?

Nogen der kan give en kort beskrivelse af hvad thread bruges til ?



<< < 12 > >>
t