Avatar billede tofte Juniormester
11. december 2004 - 22:15 Der er 9 kommentarer og
1 løsning

Styring af tekstboks

Hej

Jeg er ret ny i C#.

Jeg en form med et tekstfelt. Tekstfeltet vil jeg gerne bruge til at vise hvad mit program foretager sig(om den er ved at læse filer, skaber forbindelse til internet mm).

Fra formen kaldes metoder i nogle objekter som alle udfører forskellige handlinger, hvordan kan jeg forklare de underliggende objekter(og deres metoder), at de skal skrive deres "status" i tekstfeltet i formen. Skal jeg sende tekstfeltet med som parameter, eller skal man styre det med nogle events?

Rasmus
Avatar billede jakobdo Ekspert
11. december 2004 - 22:47 #1
Det er nok lettest at styre det på events!
Når f.eks. et af dine objekter har gjort noget, smider det jo en event, derinde kan du så sætte: TextBox1.Text = "Nu har jeg lige gjort ....";
Avatar billede tofte Juniormester
11. december 2004 - 22:52 #2
Jeg er ikke helt med. Skal jeg lave en seperat klasse som styrer events'ne. Kan du evt komme med lidt mere forklaring, jeg behøver ikke noget kode :-)
Avatar billede jakobdo Ekspert
11. december 2004 - 22:56 #3
Måske jeg heller ikke er helt med...
Hvad er det for objekter du arbejder med?
Har de nogle events?
Avatar billede tofte Juniormester
11. december 2004 - 23:05 #4
Nej ikke sådan som de ser ud.
Det er nogle jeg selv har lavet. Jeg har en klasse "spamfilter" som gør nogle forskellige ting, eks forbinder til server, undersøger mails mm.

Fra formen laver jeg et objekt, af typen spamfilter. Og så er det bare, at jeg gerne vil have status af objektet spamfilter. Tidligere var det en konsol app, så der skrev jeg bare en ny linie for hver ting som skete, men det er ikke så godt længere.
Avatar billede jakobdo Ekspert
11. december 2004 - 23:06 #5
Ahh... Så kan jeg desværre ikke hjælpe! (sorry)
Avatar billede burningice Nybegynder
11. december 2004 - 23:41 #6
som allerede nævnt, så skal din "spamfilter"-klasse have nogle events, så den kan fortælle omverdenen hvad den er i gang med.

Events er en speciel form for delegates, og er egentlig meget nemme at arbejde med. Lad os starte med at lave et Event af typen System.EventHandler, hvilket repæsenterer et event uden nogle ekstra former for data.

Selve eventen erklæres på denne måde:

        public event EventHandler Finished;
        protected virtual void OnFinished(EventArgs e)
        {
            if (Finished != null)
            {
                Finished(this, e);
            }
        }

i din spamfilter-klasse raiser du dit event når, f.eks. den er færdig, på denne måde:

OnFinished(EventArgs.Empty);

Og i selve formen skal du så have bindet en metode til eventen, det kan se sådan her ud:

ditObject.Finished += new EventHandler(Finished);

        private void Finished(object sender, EventArgs e)
        {
                    textBox1.Text = "Spamfilteret er færdigt";
        }
Avatar billede tofte Juniormester
12. december 2004 - 10:25 #7
Tak for det, jeg ser lige på det når jeg kommer hjem engang i eftermiddag. Kan man også bruge ovenstående hvis spamfilterklassen laver nye objekter, som man også vil have status af. Således at underobjektet en evnet tilbage til spamfilterklassen som så sender det retur til formen?
Avatar billede burningice Nybegynder
12. december 2004 - 21:39 #8
hvis spamfilter-objectet opretter nye objecter, skal disse også have events som så sendes videre til spamfilter-objectet som igen sender det videre til der hvor spamfilter-objectet nu engang er oprettet.
Avatar billede tofte Juniormester
12. december 2004 - 21:56 #9
Skal man bare lave en metode som opretter en ny event i det andet objekt, eller er der en smart måde at gøre det på.

Smid et svar. Og tak for hjælpen
Avatar billede burningice Nybegynder
12. december 2004 - 22:13 #10
altså...

hvis du designer dit klassehireaki fornuftigt, så vil udnyttelsen af events også komme helt naturlig.

En måde kunne f.eks. være

Klasse :: Spamfilter
    Events -> Started, MailProcessed, Finished
    Interne objecter -> MailMessage

Klasse :: MailMessage
    Events -> StartedProcessing, Processed

Når at der bliver oprettet et MailMessage-object i SpamFilter-klassen skal du så sørge for at lave en eventhandler til f.eks. Processed-eventen. Og ja, den eventhandler kan f.eks. holde styr på nogle tællere m.m. og dernæst kalde OnMailProcessed-metoden i SpamFilter-klassen
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