390 likes | 587 Views
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…”
E N D
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…” • Event-drevet, code-behind programmering • Visual Studio .NET • WinForms • Controls
Event-drevet, code-behind programmering • Ideenermegetsimpel: • “User actions” blivertil “events” • Events overføres en for en tilapplikationen, somprocessererereventenvha. en eventhandler • Sådanprogrammeres de flesteGUI’er… GUI App
Eksemplerpå GUI-baserede events • Mouse move • Mouse click • Mouse double-click • Key press • Button click • Menu selection • Change in focus • Window activation • etc.
Code-behind • Events håndteresafmetoder (eventhandlere) som ligger “bagved” den synlige GUI • I MS-termer kendtsom "code-behind" • Vores job bliver at programmeredissemetoder…
Call-backs • Events er et callfra et objektbacktilos… • Hvordanoprettesforbindelsen? • Visual Studio etablererforbindelsen via auto-genereretkode
Visual Studio .NET • Ét IDE tilalle former for .NET udvikling • Fra klassebiblioteker over form-baserede apps til web services • Du kanbruge C#, VB, C++, J#, etc.
design run break Grundlæggende Tilstande • Visual Studio operereri 1 af 3 tilstande: • Design • Run • Break • Se VS title bar hvis du eritvivl…
Eksempel: Et Windows-program • GUI apps baserespåformsogcontrols… • En form repræsenterer et vindue • En form indeholder 0 ellerflere controls • En control interagerer med brugeren • Lad osimplementere en GUI app trin for trin…
Trin 1 – Opret projekt i VS • Opret et nytprojektaftypen “Windows Forms Application” • VS opretterautomatisk en form…
Trin 2 – GUI Design • Vælg de ønskede controls fratoolbox’en… • Placérmusen over toolbox for at se controls • Drag-and-drop tilformen • Placérogtilpasstørrelsenpå dine controls
Trin 2 – GUI Design • En simpelregnemaskine: • Placérogkonfigurer controls • Klikfor at vælge • Sætproperties via Properties-vinduet
Trin 3 - Koden • Implementer formens “Code behind”… • Dobbeltklikpå den control du vilimplementere • Kodevinduetpopper automatiskfrem
Trin 4 – Kør! • Tryk F5 for at kompilere koden og starte programmet
Break mode? • Igangsættesberegningen med forkertindtastning…
Arbejde med Visual Studio • I Visual Studio arbejder vi med source files, projects & solutions • Source files indeholderkode • Extension .cs, .vb, etc. • Et projektrepræsenterer 1 assembly • Bruges af VS til at holdestyrpå source files • Allesource files skalskrivesisamme sprog • Extension .csproj, .vbproj, etc. • Solution (*.sln) files holder styrpåprojekter • Såman kanarbejde med flereprojekter
WinForms • Et andetnavn for traditionelle, Windows-agtigeGUI-applikationer • I modsætningtilWebForms, somer web-baserede • Implementeresvha. FCL • Dvs. portabelttilenhver .NET platform
object Abstraktion • FCL fungerersomabstraktion • AdskillerWinForm app fra den underlæggendeplatform instance of FCL class System.Windows.Forms.Form CLR Windows OS
Form Properties • Form properties styrerformensvisuellefremtræden: • AutoScroll • BackgroundImage • ControlBox • FormBorderStyle (sizable?) • Icon • Location • Size • StartPosition • Text (fx window's caption) • WindowState (minimized, maximized, normal) Form1 form; form = new Form1(); form.WindowState = FormWindowState.Maximized; form.Show();
Form Metoder form.Hide(); . . . form.Show(); • Actions der kanudførespå en form: • Activate:Givdenne form fokus • Close: Luk& frigørtilknyttederessourcer • Hide: Gem, men hold fast iressourcernetilsenerevisning. • Refresh: Redraw • Show: Gørformensynligpåskærmen & activate
Form Events • Events der kanreagerespå: • Find properties-vinduet • Dobbeltklikpå event-navnet • Load: ligeførformen vises første gang • Closing: nårformenlukkes (mulighed for cancel) • Closed: nårformenheltsikkertlukkes • Resize: nårbrugererændrerpåformstørrelsen • Click: nårbrugerenklikkerpåformensbaggrund • KeyPress: nårbrugerentrykker en tastmensformenharfokus
Eksempel • Spørgbrugerenførformenlukkes: 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; }
Controls • Brugerinterface-objekterpåformen: • Labels • Buttons • Text boxes • Menus • List & combo boxes • Option buttons • Check boxes • Etc.
object object object object object object Abstraktion • Forms, er controls baseretpåklasseri FCL: • System.Windows.Forms.Label • System.Windows.Forms.TextBox • System.Windows.Forms.Button • etc. • Controls erobjekterafdisseklasser
Hvemopretteralledisseobjekter? • Hvemeransvarlig for oprettelsenaf control-objekter? • Kodenauto-genereresaf Visual Studio • Efterform-objekteteroprettetoprettes control-objekterne…
Naming Conventions • Sæt dine controllers navne via Name property • The Microsoft Naming Convention: • cmdOKrefererertil en command-knap • lstNamesrefererertil en List Box Control • txtFirstNamerefererertil en Textbox Control
Labels • Tilstatiskvisningaftekst • Bruges til at label andre ting påformen • Eller tilvisningaf read-only resultater • Interessanteproperties: • Text: Detsombrugerenser • Font: Hvordanbrugerenserdet
Command-knapper • Til at klikkepåogderved fåudført en handling • Interessante properties: • Text: Knaptekst • Font: Hvordanknapteksten vises • Enabled: Kan den klikkespå? • AcceptButton: Sat til at klikkeknappenpå ENTER • CancelButton: Sat til at klikkeknappenpå ESC • Interessante events: • Click: Når der trykkespåknappen
Tekstfelter • Mestalmindelige control! • Tilvisningaftekst • Tildata fraeksempelvisdatabase • Masseraf features…
Text box Properties • Basale properties: • Text: tekstboksensindhold (string) • Modified: ertekstenmodificeretafbrugeren? (boolean) • ReadOnly: hvisbrugerenikkeskalkunnemodificere • Multi-line text boxes? • MultiLine: True tilladerflere linier • Lines: array of strings, en for hverlinieitekstboksen • ScrollBars: none, horizontal, vertical, horiz. + vert. • AcceptsReturn & AcceptsTab: skalbrugerenkunnebruge tabulator og return
Text box methods • Interessantemetoder: • Clear: fjernindholdet • Cut, Copy, Paste: interaktion med clipboard’et • Undo: undo sidsterettelseitekstboksen • Select, SelectAll: vælgnogetaf/alt indholdet
Text Box Events • Interesanteevents • Enter, Leave: forekommer, nårfokusændres • KeyPress: forekommernår en asciitastaktiveres • KeyDown, KeyUp: forekommervedalletaste kombinationer • TextChanged: forekommernårtekstenændres • Validating and Validated • Validating giver dig mulighed for at afviseinvalide input
Eksempel: Input Validering • Text boxekræveroftevalidering • .NET tilbyderValidating event • Bliversendtnårbox’en mister focus cmdOk.CausesValidation = True cmdCancel.CausesValidation = False 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 } }
Radio Buttons og Check Boxes • Tilladerbrugeren at vælge en ellerflere options • Radio buttons: • Brugerenkan kun vælgeén (mutually exclusive) • Check boxes: • Brugerenkanvælge en ellerflere (uafhængige) • Properties & events: • Checked: True hvisvalgt, False hvisikke • CheckedChangedforekommernår "Checked" ændres
Group Boxes • Visuelgrupperingaf controls • Tillader iteration gennemgruppenselementer… foreach (RadioButtonrb in this.groupBox1.Controls) if (rb.Checked) MessageBox.Show(rb.Name);
List Boxes • God til at vise/vedligeholdeen listeaf data • Listeaf strings • Listeafobjects (list box kalderselvToString()) 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);
Advarsel! • Skrivikkekode der afhængerafrækkefølgenaf events… • Rækkefølgeneraldriggaranteret • Hver event behandlesuafhængigtafandre • Nogetkode trigger events bagvedkoden… • En naturligbivirkningafevent-drevetprogrammering this.textBox1.Text = "new value" // triggers TextChanged
Kun toppenafisbjerget… • Menuer, dialoger, toolbars, etc. • Tusinderafandre controls • .NET and ActiveX • Højreklikpå Toolbox • "Customize Toolbox"
Opsamling • Event-drevetprogrammeringermegetintuitivti GUI apps • Forms erdetførsteskridti GUI design • Hverform repræsenterer et vinduepåskærmen • Konstruktionaf GUI foregårved drag-and-drop • Brugereninteragererprimært med formens control-objekter • Labels, text boxes, buttons, etc. • GUI programmeringer control programmering!!!