16. december 2005 - 04:00Der er
5 kommentarer og 1 løsning
Opdatere class når en form lukker
Jeg har en hovedform, hvor jeg skal opdater 6 labels med navne. For at skrive navnene ind, skal man trykke på indstillinger, som åbner et nyt vindue, og som sætter this.Owner.Enabled=false; (Owner er min hovedform, hvor de labes jeg skal opdatere ligger) Når jeg så har trykket på knappen, og har opdateret variablerne i min class der indeholder de variabler jeg bruger til spillet (ImportentVars), bruger jeg denne:
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Den lidt pænere måde ville være at din ChildForm smider et event, som fanges af din MainForm. Din MainForm skal så når eventet er fanget selv bestemme, hvad der skal ske... I dit tilfælde kalde metoden private void Lykkehjulet_Load(object sender, EventArgs e).
Læg mærke til, at din MainForm nu selv håndterer, hvad der skal ske, når din ChildForm smider sit event Updated. Din MainForm bliver altså ikke længere opdateret af en anden form, hvilket klart er at foretrække.
--------------------------------------- Idéen på ChildForm:
public delegate void UpdateDelegate(object sender, EventArgs e); public event UpdateDelegate Updatet;
Eventet smides således:
if (this.Update != null) this.Update(this, new EventArgs());
--------------------------------------- Idéen på MainForm:
private void <Den metode hvor du åbner din childForm>() { ChildForm childForm = new ChildForm(); childForm.Updated += new ChildForm.UpdateDelegate(this.childFormUpdated); childForm.ShowDialog(); } private void childFormUpdated(object sender, EventArgs e) { Lykkehjulet_Load(sender, e) this.Enabled = true; this.Update(); this.Refresh(); } ---------------------------------------
Så længe man ikke opererer i tråde, er det vel ikke nødvendigt at bruge events?
Hvilket leder mig til et andet mysterium:
Jeg har en app hvor jeg bruger tråde, og derfor ikke kan arbejde med at opdatere min MainForm direkte på en instans. Her bruger jeg Formens Invoke() metode og delegates - ikke events.
Hvornår vil man bruge din fremgangsmåde med events og hvornår vil man bruge Invoke()?
Jeg ved nu ikke om jeg synes det er mere bøvlet. Det er jo bare et simpelt event. I virkeligheden er det også bare er Callback via en delegate, så på den måde fungerer det helt på samme måde, som den måde du gør det på med Invoke(). Designmæssigt er det det samme.
Løsningen med et callback som event er, at det gør koblingen mellem de to forms mindre, hvilket jeg da synes er et væsentligt argument for at bruge den løsning. Ikke at jeg ikke kan lide løsningen med Invoke()!
Synes godt om
Ny brugerNybegynder
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.