knuto Skrevet 17. mars 2006 Rapporter Del Skrevet 17. mars 2006 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? (unnskuld rask skriving. *dorleg tid*) Lenke til kommentar
ieei Skrevet 17. mars 2006 Rapporter Del Skrevet 17. mars 2006 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
ieei Skrevet 17. mars 2006 Rapporter Del Skrevet 17. mars 2006 if (dialog.ShowDialog(this) == DialogResult.OK) Lenke til kommentar
Peter Skrevet 17. mars 2006 Rapporter Del Skrevet 17. mars 2006 Du har vel også this.close(), tror jeg. Lenke til kommentar
knuto Skrevet 17. mars 2006 Forfatter Rapporter Del Skrevet 17. mars 2006 Takk. Der fekk du rusta opp eit lenge ubrukt ord. Har derimot aldri sett på dialog som eit vindauge som skal køyra i klientarealet, men det er vel mogleg ... Lenke til kommentar
knuto Skrevet 18. mars 2006 Forfatter Rapporter Del Skrevet 18. mars 2006 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
wolf5 Skrevet 20. mars 2006 Rapporter Del Skrevet 20. mars 2006 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
oskaremil Skrevet 25. mars 2006 Rapporter Del Skrevet 25. mars 2006 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå