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") Bild 2: Åtta enkla kontroller som beskrivs i kapitel 7 Uppifrån och ner: Label TextBox ListBox ComboBox Button (två stycken) CheckBox (två stycken) RadioButton (sex stycken) Panel (syns inte) Bild 3: Designverktyget ("Designer") i Visual Studio Dra dit en etikett ("Label") från verktygslådan ("toolbox"). Bild 4: Man kan ändra kontrollernas egenskaper Repetition: Egenskaperna kan ändras ute till höger, till exempel Text. "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 Bild 8: Anpassa textboxen Bild 9: ListBox Bild 10: Anpassa och "fyll" listboxen Välj egenskapen Items, så kan man mata in de val man vill ska finnas. Bild 11: ComboBox Bild 12: Två knappar Bild 13: CheckBox Bild 14: En CheckBox till Bild 15: RadioButton 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.) 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. Bild 18: Action! Bild 19: Justera och fixa Bild 20: Markera och dra Bild 21: Snyggare 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. Bild 23: IntelliSense Bild 24: Egenskapen Text "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! Bild 28: En hanterare för CheckedChanged-händelsen "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! Bild 31: En riktig handdator Det ser faktiskt (nästan) precis likadant ut. Bild 32: Alla kontroller Klicka på bilden för att se den i större format! 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: Kontroller är objekt, och när man arbetar med kontroller i sitt program kommunicerar man med kontroll-objekten på flera olika sätt. Vilka? Hur skiljer sig kontrollerna i .NET Compact Framework från kontrollerna i .NET Framework ("skrivbords-.NET"). 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? Visual Studio har en finess som heter IntelliSense. Vad är det? Boken varnar för att man inte alltid kan lite på vad IntelliSense säger. Vad menar de med det? Vad menas med "inherited does not mean supported"? Boken har gjort en uppdelning av kontrollerna i sju olika grupper. Vilka? Vad är egentligen en händelsehanterare? Hur många händelsehanterare kan man ha för en viss kontroll, alltså till exempel för just den här knappen? 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? 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? Kan flera olika kontroller dela på en gemensam händelsehanterare för olika händelser? Bland de egenskaper ("properties") som alla kontroller har finns Parent. Vad händer om man ändrar Parent i en kontroll? 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? Vad händer om man sätter en Enabled-egenskapen i en etikett (Label) till false? Vad innebär egenskapen AcceptsReturn i en TextBox? Vad innebär egenskapen TextLength i en TextBox? Vad innebär egenskapen WordWrap i en TextBox? Vad gör metoden ScrollToCaret i en TextBox? Vad skiljer mellan kontrollerna ListBox i en ComboBox? 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!) Kan programmet flytta runt kontrollerna, eller har de en fast position när programmet väl startat? Vad är den viktigaste skillnaden mellan kontrollerna RadioButton och CheckBox? ("Den ena är rund och den andra är fyrkantig" är fel svar.) 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 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. 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.) 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? 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
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).
label1.Text = "Några mycket avancerade kontroller";
#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";
private void button2_Click(object sender, System.EventArgs e) { textBox1.Text += "Andra knappen!\r\n"; }
this.button2.Click += new System.EventHandler(this.button2_Click);
private void radioButton1_CheckedChanged(object sender, System.EventArgs e) { if (radioButton1.Checked) radioButton4.Checked = true; }
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:
Föregående lektion | Lektionslista | Nästa lektion