C# lukning og åbning af winforms

Tags:    c#

Hej allesammen.
Dette er mit første indlæg, så hvis jeg skriver noget et forkert sted, så bær venligst over med mig for begynderfejl.

Jeg er ikke særlig erfaren med programmering af C# .NET men jeg er begyndt at lave min egen lille lommeregner til udregning af procenter og sådan noget spas.

På et tidspunkt, ved tryk af en knap åbner jeg dog en ny winforms.
For at lukke den gamle, laver jeg et objekt af formen og skriver
Fold kodeboks ind/udCSharp kode 

og åbner den nye ved at lave et objekt af den og skriver
Fold kodeboks ind/udCSharp kode 


Men når jeg lukker det "gamle" og åbner det nye vindue/winforms. Så åbner vinduerne forskudt af hianden. Hvordan kan jeg gøre så det nye vindue åbner nøjagtig hvor det gamle blev lukket?

Håber i ved hvad jeg mener.

Tak på forhånd.
Mvh.



8 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Hej Cristian,

Uden helt at vide hvad det er du forsøger at opnå, så lyder det for mig som om at du måske har misforstået et eller andet. Din primære form, som i dit tilfælde sikkert er "Form1", bør altid være det sidste der lukkes og det man vender tilbage til når man er færdig med at bruge eventuelle andre forms.

Anyway, for at lukke dit program helt, fra en hvilken som helst form, kan du bruge:

Application.Exit();

Hvis du gerne vil have at det sker når din anden form lukkes, kan du prøve at kalde den i FormClosed eventen for din anden form. Det kunne se nogenlunde sådan her ud:

Fold kodeboks ind/udCSharp kode 


Jeg mener dog stadig lige at du skal tjekke om du gør tingene på den rigtige måde, så dine eventuelle brugere også forstår programmets flow :)

Mvh.

Kasper (TSW)



Indlæg senest redigeret d. 13.07.2011 23:12 af Bruger #1
Hvis du vil gøre det simpelt så sætter du begge vinduer til at starte i midten af skærmen altid :)
Du har på din form en property der hedder StartPosition som kan sættes til "CenterScreen" fx så vil dit nye vindue åbne i midten af skærmen, men vil kunne ses hvis de ikke har samme størrelse.

Ellers kan du bruge StartPosition og Location. Location er den x,y-position der i øverste venstre hjørne hvor din form starter.
Fold kodeboks ind/udCSharp kode 

Så inden du "hider" din gamle form så tager du x & y-coordinaterne og når du instanierer den, så sætter du frm2.StartPosition = Manual (ovenstående), og så sætter du location.

Håber det virker for dig :)



Er der en måde at "måle" på hvad en brugers skærm opløsning er, til at regne ud hvor programmet burde vises på skærmen?

Eller kan man sige.

"hvis en brugers windform er på kordinater X og Y. Og brugeren lukker et vindue"
"Så skal det nye vindue åbne på de sidste kendte X og Y kordinater" ?? :p



Indlæg senest redigeret d. 08.07.2011 13:51 af Bruger #16700
Du skal være opmærksom på at når du bruger hide, så lukker du ikke formen, men gemmer den kun for brugeren. Så hvis du vil have den skal lukkes (og ikke genbruges) så brug hellere Close() da der vil være mulighed for frigørelse af resurser.

For at centrere den kan du gøre følgende

form1.StartPosition = FormStartPosition.CenterScreen; ( http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx )

Du sætter din position først og kalder derefter Show()



Indlæg senest redigeret d. 08.07.2011 23:19 af Bruger #6559
Takker. Jeg har fået "programmet" til at starte centeret, hver gang man åbner en ny form. Så det ligner man er i det samme vindue.

Dog har jeg et lille "problem".

Form1 hider jeg når man skrifter til en anden form. Hvis jeg bruger close lukker programmet nemlig. Men når jeg trykker X (for at lukke programmet) så køre det stadig i baggrunden, fordi form 1 er gemt. Hvordan kan jeg gøre, at når jeg trykker X så lukkes form 1.



Hej Kasper.

Tak for dit svar. Måske får jeg ikke forklaret mig. Jeg har et lille program jeg har lavet, til at beregne procenter i forskellige sammenhænge, fordi jeg åbenbart kan :p.

Når man starter programmet, så kommer man til en menu hvor du har to valgmuligheder. Procent regning eller divider (knapper). Når man vælger en af dem så hider jeg form1 og åbner derefter procent form eller divider form. Mit "problem" er at. Hvis man går fra form1 til en anden form, og derefter kliker på X i højre hjørne for at lukke programmet. Så køre form1 stadig i baggrunden, fordi den er hidden.

Jeg kan ikke lukke form1 med
Fold kodeboks ind/udCSharp kode 


Og derefter åbne en ny form. Fordi det ville lukke hele programmet.

Mvh



Hej Cristian,

Jamen så kan du vel netop også bruge den løsning jeg har postet, med Application.Exit();? Ifølge dit forrige indlæg er dit problem at Form1 kører i baggrunden når Form2 lukkes - hvis du kalder Application.Exit(); så lukkes alle forms jo :)

Mvh.

Kasper (TSW)



Indlæg senest redigeret d. 13.07.2011 23:12 af Bruger #1
som jeg forstår spørgsmålet vil du gerne kunne lukke det vindue som din udregner er i og åbne forsiden med valg igen. det kan du gøre ved på forsiden med valgenene åbner du den nye form sådan:

Fold kodeboks ind/udCSharp kode 

dette gør at forsiden først skjuler sig selv men ikke lukker helt, derefter åbner den nye form sig som en dialog, det vil sige at forsiden ikke kører videre før formen er lukket, når formen så er lukket viser forsiden sig igen




t