PDA-applikationer med .NET: Lektion 8

Idag: Kontroller

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.

Test: Den här gången finns det också en mp3-fil med sämre kvalitet (ca 3 megabyte).

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: Kontroller i verktygslådan ("toolbox")

Emulatorn

Bild 2: Åtta enkla kontroller som beskrivs i kapitel 7

Uppifrån och ner:

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 3: Designverktyget ("Designer") i Visual Studio

Dra dit en etikett ("Label") från verktygslådan ("toolbox").

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 4: Man kan ändra kontrollernas egenskaper

Repetition: Egenskaperna kan ändras ute till höger, till exempel Text.

Tillämpningen "Några enkla kontroller" i emulatorn

"Bild" 5: Man kan ändra kontrollernas egenskaper

Går (förstås) även att göra inifrån programmet, antingen under uppstarten, eller sen medan det körs.

label1.Text = "Några mycket avancerade kontroller";

"Bild" 6: Designverktyget är inte magiskt, utan allt är programkod

Ur koden som designverktyget har genererat:

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{

    // En massa rader borttagna här

    this.label1.Text = "Några enkla kontroller";

Bild 7: TextBox

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 8: Anpassa textboxen

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 9: ListBox

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 10: Anpassa och "fyll" listboxen

Välj egenskapen Items, så kan man mata in de val man vill ska finnas.

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 11: ComboBox

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 12: Två knappar

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 13: CheckBox

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 14: En CheckBox till

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 15: RadioButton

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 16: Tre stycken radioknappar

Radioknappar som ligger i samma behållare, till exempel en Form, hör ihop. (Högst en av dem kan vara markerad samtidigt.)

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 17: En annan grupp med radioknappar

De här tre knapparna ska inte höra ihop med de andra tre. Därför placerar vi dem i en Panel.

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 18: Action!

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 19: Justera och fixa

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 20: Markera och dra

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 21: Snyggare

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 22: En hanterare för Click-händelsen

Markera knappen, klicka på blixten för att få fram händelserna ("events"), och dubbelklicka på händelsen Click.

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 23: IntelliSense

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 24: Egenskapen Text

Tillämpningen "Några enkla kontroller" i emulatorn

"Bild" 25: Metoden button2_Click

Metoden button2_Click är händelsehanterare för händelsen Click på knappen button2. Skapad av designverktyget, men vi måste lägga in programkoden i kroppen på metoden.

private void button2_Click(object sender, System.EventArgs e)
{
        textBox1.Text += "Andra knappen!\r\n";
}

"Bild" 26: Det är inte namnet!

I metoden InitializeComponent, som designverktyget skrivit åt oss, anges vilka metoder som är händelsehanterare för vad:

this.button2.Click += new System.EventHandler(this.button2_Click);

Bild 27: Action!

Tillämpningen "Några enkla kontroller" i emulatorn

Bild 28: En hanterare för CheckedChanged-händelsen

Tillämpningen "Några enkla kontroller" i emulatorn

"Bild" 29: Metoden radioButton1_CheckedChanged

Metoden radioButton1_CheckedChanged är händelsehanterare för händelsen Click på knappen button2.

private void radioButton1_CheckedChanged(object sender, System.EventArgs e)
{
        if (radioButton1.Checked)
                radioButton4.Checked = true;
}

Bild(er) 30: Action!

Tillämpningen "Några enkla kontroller" i emulatorn     Tillämpningen "Några enkla kontroller" i emulatorn

Bild 31: En riktig handdator

Det ser faktiskt (nästan) precis likadant ut.

Tillämpningen "Några enkla kontroller" på en riktig handdator

Bild 32: Alla kontroller

Klicka på bilden för att se den i större format!

Alla kontroller

Läsanvisningar

Den här lektionen motsvaras av kapitel 7, Inside Controls, i kursboken.

Kapitlet går grundligt igenom grunderna för hur man bygger användargränssnitt i .NET Compact Framework, med kontroller och händelsehanterare. Man behöver kanske inte läsa allt intensivt, men man bör sätta sig in i de åtta viktiga kontroller som gås igenom, och lära sig hur man bygger användargränssnitt med hjälp av dessa.

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

  1. Kontroller är objekt, och när man arbetar med kontroller i sitt program kommunicerar man med kontroll-objekten på flera olika sätt. Vilka?
  2. Hur skiljer sig kontrollerna i .NET Compact Framework från kontrollerna i .NET Framework ("skrivbords-.NET").
  3. Boken räknar upp sju "core events", dvs händelser som finns för (nästan) alla kontroller i .NET Compact Framework. Vilka är det, och vad betyder de?
  4. Visual Studio har en finess som heter IntelliSense. Vad är det?
  5. Boken varnar för att man inte alltid kan lite på vad IntelliSense säger. Vad menar de med det?
  6. Vad menas med "inherited does not mean supported"?
  7. Boken har gjort en uppdelning av kontrollerna i sju olika grupper. Vilka?
  8. Vad är egentligen en händelsehanterare?
  9. Hur många händelsehanterare kan man ha för en viss kontroll, alltså till exempel för just den här knappen?
  10. Hur många händelsehanterare kan man ha för en viss händelse i en viss kontroll, alltså till exempel för Click-händelsen i just den här knappen?
  11. Kan flera olika kontroller dela på en gemensam händelsehanterare för en viss händelse, alltså till exempel Click-händelsen för tre olika knappar?
  12. Kan flera olika kontroller dela på en gemensam händelsehanterare för olika händelser?
  13. Bland de egenskaper ("properties") som alla kontroller har finns Parent. Vad händer om man ändrar Parent i en kontroll?
  14. Vi tänker oss att en viss knapp (dvs en kontroll av klassen Button) just nu inte är tillämplig. Användaren kanske har valt fordonstypen husvagn, och då är knappen Starta motorn inte meningsfull. Man kan låta händelsehanteraren för Starta motorn-knappen skriva ut ett felmeddelande om att husvagnar har ju inga motorer, men kan man lösa det hela bättre med egenskaperna Enabled och Visible?
  15. Vad händer om man sätter en Enabled-egenskapen i en etikett (Label) till false?
  16. Vad innebär egenskapen AcceptsReturn i en TextBox?
  17. Vad innebär egenskapen TextLength i en TextBox?
  18. Vad innebär egenskapen WordWrap i en TextBox?
  19. Vad gör metoden ScrollToCaret i en TextBox?
  20. Vad skiljer mellan kontrollerna ListBox i en ComboBox?
  21. Man kan lägga in alternativen som ska visas i en ListBox eller en ComboBox med designverktyget i Visual Studio, men man kan också göra det i vanlig programkod. Hur? (Ledtråd: Man kan titta i koden som designverktyget genererar!)
  22. Kan programmet flytta runt kontrollerna, eller har de en fast position när programmet väl startat?
  23. Vad är den viktigaste skillnaden mellan kontrollerna RadioButton och CheckBox? ("Den ena är rund och den andra är fyrkantig" är fel svar.)
  24. Det finns en viktig skillnad mellan hur ComboBox fungerar i .NET Compact Framework och i de flesta andra sammanhang, inklusive skrivbords-.NET. Vilken skillnad är det?
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

  1. Gör en applikation där du använder de av de åtta kontrollerna (Label, TextBox, ListBox, ComboBox, Button, CheckBox, RadioButton och Panel) som du inte använt någon gång tidigare i kursen.
  2. Låt varje kontroll reagera på minst en händelse, och i händelsehanteraren ändra på tillståndet i någon annan kontroll. (Till exempel som en av knapparna i exemplet i lektionen påverkade innehållet i textrutan.)
  3. Går det att skapa händelseloopar, genom att två kontrollers händelsehanterare båda ändrar tillståndet på den andra kontrollen, som sen i sin tur får en händelse att hantera på grund av ändringen, och så vidare? Vad händer?
  4. Prova att sätta en brytpunkt på en metod i debuggern, och stega sen fram rad för rad i programmet. Studera variabler och objekt. Går de att ändra?

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


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se), 28 oktober 2005