Avatar billede burningice Nybegynder
12. december 2002 - 16:07 Der er 13 kommentarer og
2 løsninger

Starte en tråd fra en anden form (Public-ting)

Jeg har et lille program bestående af 3 forms, hvor der på main-formen skal vises hvilke kunder der er oprettet i en liste. Listen opdateres af en tråd som startes når man opretter en kunde og stopper igen når indholdet af listen ændrer sig... det er bare fjong.

Nu er jeg dog løbet ind i et et lille problem, nemlig at man på form3 kan opdatere en kundes information, og det var så tanken at tråden på mainformen skulle aktiveres når man gemte de ændrede informationer...

hvordan griber man det bedst an? Jeg har før leget med at gøre en procedure public så man kunne kalde den fra en anden form, men fårk hvor er det noget bøvl :(
Avatar billede simon.ulsnes Nybegynder
12. december 2002 - 16:20 #1
I form3:
DinMainForm mf = (DinMainForm)this.Parent;
mf.KaldDenneMetode();

// Simon
Avatar billede burningice Nybegynder
12. december 2002 - 16:36 #2
og metoden på form1 skal ikke være public eller noget? skal form3 forresten være åbnet på et bestemt måde, for at form1 bliver dens parent?
Avatar billede burningice Nybegynder
12. december 2002 - 16:48 #3
hmm.. får fejlen

Object set to an NullReference :(
Avatar billede roger Nybegynder
12. december 2002 - 18:13 #4
Du skal helst lade dine main-tråd opdate GUI.

Lad din "anden" tråd lave det arbejde den skal, og derefter kalde invoke metoden. På den måde opdatere main-tråden GUI.

Håber du forstod hvad jeg mente, ellers skriv lige igen.
Avatar billede burningice Nybegynder
12. december 2002 - 18:19 #5
roger>> ikke helt... jeg er rimelig grøn i forbindelse med programmering af c# i forbindelse med Windows Forms... kommer fra VB6 miljøet ;)
Avatar billede simon.ulsnes Nybegynder
12. december 2002 - 19:25 #6
form3 skal åbnes via Show() eller ShowDialog()...
Du kan evt. lave en ny constructor til form3...

public form3(DinMainForm dm)
{
  Parent = dm;
}

Og jo, metoden på din mainform skal være public...

// Simon
Avatar billede burningice Nybegynder
12. december 2002 - 19:56 #7
simon.ulsnes>> det spiller ikke rigtigt :(

"frmMain denotes a class, where a variable was expected"

koden til at oprette formen:
Form frmSchedules = new frmSchedules(frmMain);
frmSchedules.Show();

constructeren:
public frmSchedules(frmMain dm)
{
    Parent = dm;
Avatar billede simon.ulsnes Nybegynder
12. december 2002 - 20:08 #8
Brug:
new frmSchedules(this);
Avatar billede roger Nybegynder
12. december 2002 - 20:24 #9
Du skal lave en delegate der opdaterer din GUI.

I din tråd kalder du så dinGuiControl.Invoke(din delegate);

På den måde får du din main-tråd til at update GUI.
Avatar billede roger Nybegynder
12. december 2002 - 20:25 #10
Mht. evt. parametre - kig på beskrivelsen for metoden invoke.
Avatar billede burningice Nybegynder
12. december 2002 - 21:45 #11
roger>> det må jeg kigge nærmere på en anden gang... men det lyder at det er beregnet hvis ens GUI ændrer sig meget?? det gør min slet ikke... eneste grund til at jeg har min tråd, er at access er lidt sløv med at få oprettet en post :(

simon>> hmm... "Cannot add a top level control to a control"... *arg*
Avatar billede simon.ulsnes Nybegynder
12. december 2002 - 21:49 #12
Så lav en ny Parent-definition i form3...

frmMain Parent;

public form3(frmMain p)
{
  Parent = p;
}

// Simon
Avatar billede burningice Nybegynder
12. december 2002 - 21:58 #13
hehe.. det går da helt galt...

The keyword is requered on frmSchedules.Parent because it hides inherited members System.Windows.Forms.Control.Parent

og det er denne linje det går galt

frmMain Parent;
Avatar billede simon.ulsnes Nybegynder
12. december 2002 - 22:04 #14
OK, kald den noget andet end Parent... fParent, eller noget...
Avatar billede burningice Nybegynder
12. december 2002 - 23:08 #15
simon> jeg har ændret strukturen i programmet lidt, sådan at jeg åbner form3 med opendialog, og derfor kan udføre min kode på form3, og starte tråden, når formen lukkes på form1 (frmMain).

I skal da ikke snydes helt 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
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