winforms
DESCRIPTION
WinForms. GUI Programmering i .NET. Mål. “.NET supports two types of form-based apps, WinForms and WebForms. WinForms are the traditional, desktop GUI apps. The great news is that Visual Studio .NET enables quick, drag-and-drop construction of form-based applications…” - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/1.jpg)
1
GUI Programmering i .NET
WinForms
![Page 2: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/2.jpg)
2
Mål
“.NET supports two types of form-based apps, WinForms and WebForms. WinForms are the traditional, desktop GUI apps.
The great news is that Visual Studio .NET enables quick, drag-and-drop construction of form-based applications…”
Event-drevet, code-behind programmeringVisual Studio .NETWinFormsControls
![Page 3: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/3.jpg)
3
Event-drevet, code-behind programmering
Ideen er meget simpel:“User actions” bliver til “events”Events overføres en for en til applikationen, som processererer eventen vha. en eventhandler
Sådan programmeres de fleste GUI’er…
GUI App
![Page 4: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/4.jpg)
4
Eksempler på GUI-baserede events
Mouse moveMouse clickMouse double-clickKey pressButton clickMenu selectionChange in focusWindow activationetc.
![Page 5: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/5.jpg)
5
Code-behind
Events håndteres af metoder (eventhandlere) som ligger “bagved” den synlige GUI
I MS-termer kendt som "code-behind"Vores job bliver at programmere disse metoder…
![Page 6: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/6.jpg)
6
Call-backs
Events er et call fra et objekt back til os…Hvordan oprettes forbindelsen?
Visual Studio etablerer forbindelsen via auto-genereret kode
![Page 7: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/7.jpg)
7
Visual Studio .NET
Ét IDE til alle former for .NET udviklingFra klassebiblioteker over form-baserede apps til web servicesDu kan bruge C#, VB, C++, J#, etc.
![Page 8: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/8.jpg)
8
Grundlæggende Tilstande
Visual Studio opererer i 1 af 3 tilstande:1) Design2) Run3) Break
Se VS title bar hvis du er i tvivl…
design run
break
![Page 9: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/9.jpg)
9
Eksempel: Et Windows-program
GUI apps baseres på forms og controls…En form repræsenterer et vindueEn form indeholder 0 eller flere controlsEn control interagerer med brugeren
Lad os implementere en GUI app trin for trin…
![Page 10: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/10.jpg)
10
Trin 1 – Opret projekt i VS
Opret et nyt projekt af typen “Windows Forms Application”
VS opretter automatisk en form…
![Page 11: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/11.jpg)
11
Trin 2 – GUI Design
Vælg de ønskede controls fra toolbox’en…Placér musen over toolbox for at se controlsDrag-and-drop til formenPlacér og tilpas størrelsen på dine controls
![Page 12: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/12.jpg)
12
Trin 2 – GUI Design
En simpel regnemaskine:
Placér og konfigurer controlsKlik for at vælgeSæt properties via Properties-vinduet
![Page 13: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/13.jpg)
13
Trin 3 - Koden
Implementer formens “Code behind”…Dobbeltklik på den control du vil implementere
Kodevinduet popper automatisk frem
![Page 14: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/14.jpg)
14
Trin 4 – Kør!
Tryk F5 for at kompilere koden og starte programmet
![Page 15: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/15.jpg)
15
Break mode?
Igangsættes beregningen med forkert indtastning…
![Page 16: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/16.jpg)
16
Arbejde med Visual Studio
I Visual Studio arbejder vi med source files, projects & solutions
Source files indeholder kodeExtension .cs, .vb, etc.
Et projekt repræsenterer 1 assemblyBruges af VS til at holde styr på source filesAlle source files skal skrives i samme sprogExtension .csproj, .vbproj, etc.
Solution (*.sln) files holder styr på projekterSå man kan arbejde med flere projekter
![Page 17: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/17.jpg)
17
WinForms
Et andet navn for traditionelle, Windows-agtige GUI-applikationer
I modsætning til WebForms, som er web-baserede
Implementeres vha. FCLDvs. portabelt til enhver .NET platform
![Page 18: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/18.jpg)
18
Abstraktion
FCL fungerer som abstraktionAdskiller WinForm app fra den underlæggende platform
System.Windows.Forms.Form
CLR
Windows OS
instance of
FCL classobject
![Page 19: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/19.jpg)
19
Form Properties
Form properties styrer formens visuelle fremtræden:
AutoScrollBackgroundImageControlBoxFormBorderStyle (sizable?)IconLocationSizeStartPositionText (fx window's caption)WindowState (minimized, maximized, normal)
Form1 form;form = new Form1();form.WindowState = FormWindowState.Maximized;form.Show();
![Page 20: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/20.jpg)
20
Form Metoder
Actions der kan udføres på en form:
Activate: Giv denne form fokusClose: Luk & frigør tilknyttede ressourcerHide: Gem, men hold fast i ressourcerne til senere visning. Refresh: RedrawShow: Gør formen synlig på skærmen &
activate
form.Hide(); . . .form.Show();
![Page 21: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/21.jpg)
21
Form Events
Events der kan reageres på:Find properties-vinduetDobbeltklik på event-navnet
Load: lige før formen vises første gangClosing: når formen lukkes (mulighed for cancel)Closed: når formen helt sikkert lukkesResize: når brugerer ændrer på formstørrelsenClick: når brugeren klikker på formens baggrundKeyPress: når brugeren trykker en tast mens formen har fokus
![Page 22: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/22.jpg)
22
Eksempel
Spørg brugeren før formen lukkes:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e){ DialogResult r;
r = MessageBox.Show("Do you really want to close?", "MyApp", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (r == DialogResult.No) e.Cancel = true;}
![Page 23: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/23.jpg)
23
Controls
Brugerinterface-objekter på formen:
LabelsButtonsText boxesMenusList & combo boxesOption buttonsCheck boxesEtc.
![Page 24: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/24.jpg)
24
Abstraktion
Forms, er controls baseret på klasser i FCL:System.Windows.Forms.LabelSystem.Windows.Forms.TextBoxSystem.Windows.Forms.Buttonetc.
Controls er objekter af disse klasser
object
object
object
object
object
object
![Page 25: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/25.jpg)
25
Hvem opretter alle disse objekter?
Hvem er ansvarlig for oprettelsen af control-objekter?
Koden auto-genereres af Visual StudioEfter form-objektet er oprettet oprettes control-objekterne…
![Page 26: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/26.jpg)
26
Naming Conventions
Sæt dine controllers navne via Name propertyThe Microsoft Naming Convention:cmdOK refererer til en command-knaplstNames refererer til en List Box ControltxtFirstName refererer til en Textbox Control
![Page 27: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/27.jpg)
27
Labels
Til statisk visning af tekstBruges til at label andre ting på formenEller til visning af read-only resultater
Interessante properties:Text: Det som brugeren serFont: Hvordan brugeren ser det
![Page 28: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/28.jpg)
28
Command-knapper
Til at klikke på og derved få udført en handling
Interessante properties:Text: KnaptekstFont: Hvordan knapteksten visesEnabled: Kan den klikkes på?
AcceptButton: Sat til at klikke knappen på ENTERCancelButton: Sat til at klikke knappen på ESC
Interessante events:Click: Når der trykkes på knappen
![Page 29: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/29.jpg)
29
Tekstfelter
Mest almindelige control!Til visning af tekstTil data fra eksempelvis database
Masser af features…
![Page 30: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/30.jpg)
30
Text box Properties
Basale properties:Text: tekstboksens indhold (string)Modified: er teksten modificeret af brugeren? (boolean)ReadOnly: hvis brugeren ikke skal kunne modificere
Multi-line text boxes?MultiLine: True tillader flere linierLines: array of strings, en for hver linie i tekstboksenScrollBars: none, horizontal, vertical, horiz. + vert.
AcceptsReturn & AcceptsTab: skal brugeren kunne bruge tabulator og return
![Page 31: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/31.jpg)
31
Text box methods
Interessante metoder:Clear: fjern indholdetCut, Copy, Paste: interaktion med clipboard’etUndo: undo sidste rettelse i tekstboksenSelect, SelectAll: vælg noget af/alt indholdet
![Page 32: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/32.jpg)
32
Text Box Events
Interesante eventsEnter, Leave: forekommer, når fokus ændresKeyPress: forekommer når en ascii tast aktiveresKeyDown, KeyUp: forekommer ved alle taste kombinationerTextChanged: forekommer når teksten ændres
Validating and ValidatedValidating giver dig mulighed for at afvise invalide input
![Page 33: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/33.jpg)
33
Eksempel: Input Validering
Text boxe kræver ofte validering.NET tilbyder Validating eventBliver sendt når box’en mister focus
private void txtName_Validating(object sender, System.ComponentModel.CancelEventArgs e){ if (this.textBox1.Text.Trim() == "") { // invalid input! MessageBox.Show("Please enter name or id..."); e.Cancel = true; // cancel returns focus back to text box }}
cmdOk.CausesValidation = True
cmdCancel.CausesValidation = False
![Page 34: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/34.jpg)
34
Radio Buttons og Check Boxes
Tillader brugeren at vælge en eller flere options
Radio buttons:Brugeren kan kun vælge én (mutually exclusive)
Check boxes:Brugeren kan vælge en eller flere (uafhængige)
Properties & events:Checked: True hvis valgt, False hvis ikkeCheckedChanged forekommer når "Checked" ændres
![Page 35: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/35.jpg)
35
Group Boxes
Visuel gruppering af controlsTillader iteration gennem gruppens elementer…
foreach (RadioButton rb in this.groupBox1.Controls) if (rb.Checked) MessageBox.Show(rb.Name);
![Page 36: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/36.jpg)
36
List Boxes
God til at vise/vedligeholde en liste af dataListe af stringsListe af objects (list box kalder selv ToString())
Customer[] customers; . . // create & fill array with objects... .
// display customers in list box foreach (Customer c in customers) this.listBox1.Items.Add(c);
// display name of selected customer (if any)Customer c;c = (Customer) this.listBox1.SelectedItem;if (c == null) return;else MessageBox.Show(c.Name);
![Page 37: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/37.jpg)
37
Advarsel!
1. Skriv ikke kode der afhænger af rækkefølgen af events…
Rækkefølgen er aldrig garanteretHver event behandles uafhængigt af andre
2. Noget kode trigger events bagved koden…En naturlig bivirkning af event-drevet programmering
this.textBox1.Text = "new value" // triggers TextChanged
![Page 38: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/38.jpg)
38
Kun toppen af isbjerget…
Menuer, dialoger, toolbars, etc.
Tusinder af andre controls.NET and ActiveXHøjreklik på Toolbox"Customize Toolbox"
![Page 39: WinForms](https://reader035.vdocuments.us/reader035/viewer/2022062222/56816592550346895dd85e19/html5/thumbnails/39.jpg)
39
Opsamling
Event-drevet programmering er meget intuitivt i GUI apps
Forms er det første skridt i GUI designHver form repræsenterer et vindue på skærmenKonstruktion af GUI foregår ved drag-and-drop
Brugeren interagerer primært med formens control-objekter
Labels, text boxes, buttons, etc.GUI programmering er control programmering!!!