Gå til innhold

Anbefalte innlegg

God dag.

 

Eg er heilt nybegynner innen C#, og har no støtt på eit IQ-problem som ikkje har vore noko problem i til døme C++.

 

Eg har eit hovudvindauge. Hovudvindauget har ein meny, og er ellers nesten ikkje funksjonell. Men vindauget startar ved oppstart ein control i clientarealet som seier velkommen til brukaren, og forklarar han enkle prinsipp i progammet.

 

Med menyen kan brukaren opna ein control som i dette dømet er ein control for å endre instillingane til programmet. Brukaren endrar diverse instillingar og trykker på save.

 

Her kom problemet. Korleis kan eg "fortelja" hovudvindauget at denne controlen no skal lukkast, og evt. kva som skal skje vidare? Kva om brukaren heller trykka på ein knapp med namnet "Drit i instillingane. Sett dei til default, og hopp rett til handlinga". Då hadde oppgåva vore å fått hovudvindauget til å lukka denne controlen og vidare evt. opna ein annan.

 

Akkurat dette går litt over min forstand. Heilt sikkert fordi eg er så ny i C#. I grunnen ser det ut til at problemet eigentleg er eit OOP-problem. Eg ville helst fått controlen som køyrer i clientarealet til hovudvindauget til å køyra ein funksjon i klassen til hovudvindauget. I C++ kunne problemet blitt løyst med ein pointer.

 

Har eg rett og slett bygd opp programmet på ein dum måte? Korleis er det vanleg å programmera eit slikt program? :hmm:

 

(unnskuld rask skriving. *dorleg tid*)

Lenke til kommentar
Videoannonse
Annonse

De fleste vil vel åpne en dialog. En modal dialog. Du lager en ny klasse du som arver System.Windows.Forms.Form

http://msdn2.microsoft.com/en-us/library/s...orm(VS.80).aspx.

 

Når brukeren klikker på menyen, feks: File->Tools->Options, åpner du dialogen/formen med metoden ShowDialog()

http://msdn2.microsoft.com/en-us/library/c...edk(VS.80).aspx.

 

Metoden returner når brukeren klikker på feks OK eller Cancel knappen i dialogen. (Husk at når du lager dialogen kan du assigne DialogResult til knappene i dialogen). Returverdien til ShowDialog() er av typen DialogResult.

 

Feks

 

MyDialog dialog = new MyDialog();
// Initialize dialog...?
if (dialog.ShowDialog() == DialogResult.OK)
{
   // Save options...
}

Er ganske elementært dette med modale dialoger. Og svært enkelt i .NET. Tror det skal holde med det jeg har forklart her nå. Resten finner du nok ut selv. :) Kunne sikkert forklart modal og modeless dialoger, men som sagt du; klarer deg langt med det jeg har forklart her.

Lenke til kommentar

Hmm. Etter nærmare ettertanke vil jo ikkje dette fungera heilt skikkeleg.

MyDialog dialog = new MyDialog();
// Initialize dialog...?
if (dialog.ShowDialog() == DialogResult.OK)
{
  // Save options...
}

Her vil jo hovudvindauget frysa medan dialogen er open. Det er ikkje kva eg vil ha. Er vel modeless dialog eg ser etter, men vil den oppfylla krava mine?

Lenke til kommentar

C++ har pointers. C# har referanser.

 

Ved oppretting av ny instans av et popupvindu/dialog som du vil ha, så sender du med "this". Dermed har popupvinduet en referanse til hovedvinduet ditt som den kan bruke til å kalle metoder på denne.

 

--MainForm--
MyPopupForm f = new MyPopupForm(this).
f.Show(); //modeless

--MyPopupForm--
public MyPopupForm(MainForm hovedvinduref){
 ...
}
private void OkButton_Click(object sender, event e){
 //Oppdater hovedvindo med info
 hovedvinduref.OppdaterINFO(blah, blah, blah);
 this.Close();
}

 

 

Du kan vel også lage Singleton av mainform. Da kan du aksessere hovedformen via singleton egenskapen.

Lenke til kommentar
Hmm. Etter nærmare ettertanke vil jo ikkje dette fungera heilt skikkeleg.
MyDialog dialog = new MyDialog();
// Initialize dialog...?
if (dialog.ShowDialog() == DialogResult.OK)
{
  // Save options...
}

Her vil jo hovudvindauget frysa medan dialogen er open. Det er ikkje kva eg vil ha. Er vel modeless dialog eg ser etter, men vil den oppfylla krava mine?

5771763[/snapback]

 

bytt ut ShowDialog med .Show()

 

hvis dialogresult ikke fungerer med dette kan du sette en public variabel i MyDialog. Denne kan nåes , selv om vinduet er lukket

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...