PDA-applikationer med .NET: Lektion 6

Idag: Fönster och formulär ("forms")

Klicka på startknappen i den lilla mediaspelaren ovan för att lyssna på lektionen. (Man kan behöva vänta en stund på att ljudfilen laddas ner.) Om mediaspelaren inte syns, eller om det inte fungerar av något annat skäl, kan man klicka här för att ladda ner mp3-filen (ca 24 minuter, ca 11 megabyte). Beroende på hur webbläsaren är konfigurerad kan det kräva ett separat mp3-spelarprogram av något slag.

Tänk på att lektionerna ger en översikt och introduktion. Du måste läsa i kursboken och (viktigast!) arbeta med övningarna för att tillgodogöra dig kursen.

Bild 1: Fönster = formulär = System.Windows.Forms.Form

Ett sånt fönster i emulatorn.

(Det här är också exempelprogrammet som används i kapitel 5 i boken.)

Huvudfönstret i emulatorn

Bild 2: Samma fönster när man kör programmet på skrivbordet

.NET Compact Framework är en delmängd ("greatest hits", som de skriver i boken) av .NET Framework. Man kan köra sitt Pocket PC-program i vanliga Windows.

Leta rätt på den kompilerade, körbara filen (till exempel C:\Documents and Settings\Padrone\My Documents\Visual Studio Projects\Väderexemplet\bin\Debug\Väderexemplet.exe) och dubbelklicka på den!

Nu syns det tydligare att det är ett vanligt fönster:

Huvudfönstret på skrivbordet

"Bild" 3: Några fakta om fönstren i Pocket PC

  • Klassen System.Windows.Forms.Form beskriver fönster.
  • Man skapar en egen klass, som ärver från klassen Form.
  • Placera ut knappar och andra kontroller, typiskt med hjälp av Designern.
  • Man instansierar den klassen, dvs skapar ett objekt, och det är det som är själva fönstret.
  • Alltid maximerat, dvs fyller hela skärmen på handdatorn.
  • Därför ser man bara ett fönster i taget.

Bild(er) 4: Att stänga och minimera fönster

I skrivbords-Windows kan man flytta runt fönster, ändra storlek, låta dem överlappa, med mera.

I Pocket PC kan man bara antingen

  1. Minimera = gömma undan, eller
  2. Stänga = förstöra

Vilket av dem som man kan göra beror på fönstret. Skillnaden syns i övre högra hörnet:

X = minimera = göm undan     ok = stäng = förstör

"Bild" 5: En gång till: man kan stänga och minimera!

Kom ihåg:
  1. x = minimera = gömma undan = _ i skrivbords-Windows
  2. ok = stänga = förstöra = x i skrivbords-Windows

"Bild" 6: Programmen avslutas inte - de bara minimeras

En Pocket PC-handdator, och de enskilda programmen:
  • Som en radio eller en TV!
  • Inte som en dator!
Programmet minimeras (göms undan), det stängs (avslutas) inte.

"Bild" 7: Huvudfönstret och andra fönster

Ett Pocket PC-program har:
  1. Ett huvudfönster.
  2. Noll, ett eller flera andra fönster.
Om huvudfönstret:
  • Kan bara minimeras, inte stängas. (Kom ihåg: Som en TV, inte som en dator!)
  • x-knappen i övre högra hörnet minimerar fönstret.
  • Om fönstret förstörs, till exempel från ett särskilt Avsluta-menyval, avslutas programmet.
De andra "under"-fönstren:
  • Skapas och öppnas av programmet medan det körs, t ex dialog- och informationsrutor.
  • Döljer programmets huvudfönster, och alla andra fönster.
  • En del av dessa kan bara stängas, varvid de förstörs. ok-knappen i övre högra hörnet stänger fönstret.
  • En del av dessa kan minimeras, varvid de göms undan (men finns kvar). x-knappen i övre högra hörnet minimerar fönstret.
  • Då får man inte tappa bort dem!

Bild 8: Egenskapen MinimizeBox

Egenskapen MinimizeBox styr vad man kan göra med fönstret.

Högerklicka på formuläret i fönstret, välj Properties, och leta reda på MinimizeBox. Ändra till False. Nu ändras minimeringsboxen till en stängningsbox (x ändras till ok).

Att sätta egenskapen MinimizeBox till False

Bild 9: Minimerade program = dolda program

Huvudfönster som minimeras gör att programmet ligger i bakgrunden, men kan fås fram om man "startar samma program på nytt"!

Man kan titta på vilka program som körs just nu på handdatorn. Där finns även de minimerade programmen med:

Minimerade program som kör i bakgrunden

Bild 10: Ett exempel med "borttappade" eller "övergivna" fönster

"Under"-fönster (dvs inte huvudfönster) ska man inte minimera hur som helst.
Antingen stäng dem, eller håll reda på dem på något sätt.

Vi lägger till en hanterare för när användaren klickar på knappen Tryck:

Knapp-klick-händelse-hanteraren

"Bild" 11: Programkoden för knapp-klick-händelse-hanteraren

Metoden skapas av designverktyget, men de två raderna inuti skriver vi dit själva.

Vad är det för fel på det här?

    private void bPressure_Click(object sender, System.EventArgs e)
    {
        FormPressure tryckfönstret = new FormPressure();
        tryckfönstret.Show();
    }

Bild 12: Tryckfönstret i emulatorn, med MinimizeBox = True

Notera minimeringsboxen (x:et).

Temperaturfönstret i emulatorn

Bild 13: Tryckfönstret på skrivbordet, med MinimizeBox = True

Temperaturfönstret på skrivbordet

Bild 14: Kör programmet på skrivbordet

Nu syns det att det blir en hel massa tryckfönster! Ett nytt skapas varje gång man klickar på knappen Tryck.

Flera fönster synliga på skrivbordet

Bild 15: Tryckfönstret i emulatorn, med MinimizeBox = False

Ändra egenskapen MinimizeBox till False, så fönstret inte kan minimeras utan bara stängas.

Temperaturfönstret i emulatorn

Bild 16: Tryckfönstret på skrivbordet, med MinimizeBox = False

Temperaturfönstret på skrivbordet

Läsanvisningar

Den här lektionen motsvaras av kapitel 5, Creating Forms, i kursboken.

Avsnittet Inheritance and Visual Inheritance (s 294-302) är intressant och bra att kunna, men ingår inte i den här kursen.

Här är några frågor som kan användas som instuderingsfrågor:

  1. Vad är det för skillnad på att stänga och minimera ett fönster i Pocket PC?
  2. Hur anger man om ett fönster ska gå att stänga respektive minimera?
  3. Hur skiljer sig det där med att stänga och minimera fönster på Pocket PC jämfört med vanliga skrivbords-Windows?
  4. Vad står förkortningen PME för?
  5. Vad är en egenskap (på engelska "property")?
  6. Vad är en metod (på engelska "method")?
  7. Vad är en händelse (på engelska "event")?
  8. Hittills i kursen har jag nämnt egenskaperna Locked och MinimizeBox i klassen System.Windows.Forms.Form. Nämn någon mer egenskap i den klassen som du tror du kommer att ha nytta av! Till vad?
  9. Vad gör metoderna Show och ShowDialog? Hur skiljer de sig? varför har man två olika?
  10. Metoden Close stänger ett fönster. Vad händer med fönstret och dess kontroller (dvs knappar mm) när man stänger det?
  11. Vad är en tråd (engelska: "thread")?
  12. Hur startar man en tråd i C#?
  13. Ibland vill man göra saker som tar lång tid, till exempel skapa komplicerade fönster eller koppla upp sig via Internet, som svar på att användaren klickar på en knapp. Boken rekommenderar att man då inte gör allt det jobbet i hanterarmetoden, utan startar en egen tråd för det. Varför?
Om du vill skriva svar på instuderingsfrågorna, räcker det för de flesta frågorna med en eller några få meningar.

Programmeringsövningar

Föregående lektion | Lektionslista | Nästa lektion


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 23 oktober 2005