You are on page 1of 35

Uvod u programiranje

Programiranje 1 (550)
Poglavlje 8

Windows forme

dr
dr.. sc
sc.. Josip Musić
jmusic@
jmusic @fesb.hr

Originalne slideove izradio:


Teo Žuljević,
Žuljević, dipl.
dipl. ing.
1 teo.zuljevic@
teo.zuljevic @fesb.hr
Pregled
Model dogañaja u .NET Frameworku-
Frameworku-u
Što je rukovatelj dogañaja?
dogañaja?
Handles klju
ključčna riječ
riječ
Windows forma
Hijerarhija klasa Windows formi
Korištenje svojstava for
forme
Korištenje postupaka forme
Korištenje dogañaja forme
Životni ciklus forme
Korištenje standardnih dijaloških okvira
Kontrole Windows formi
Dodavanje i ureñivanje kontrola na formi
Korištenje kontrola formi
Hijerarhija klasa kontrola forme
Korištenje svojstava i postupaka kontrola
Dodavanje kontrola za vrijeme izvoñenja
Rukovanje dogañajima miša
Rukovanje dogañajima tipkovnice
2
Provjera korisničkog unosa
Model dogañaja u .NET Framework-
Framework-u
Dogañaji se koriste za signalizaciju nastanka neke akcije.
Pošiljatelj i primatelj dogañaja.
Delegiranje i Handles

Poziva se
delegiranje

Delegiranje poziva
Delegiranje pridruženu oroceduru

3
Što je rukovatelj dogañaja?
Rukovatelj dogañaja je isječak koda koji se poziva kada je
pripadajući dogañaj podignut
postupak povezan s odreñenim dogañajem
kada je dogañaj podignut, kod unutar rukovatelja se izvodi
Dva argumenta dogañaja u rukovatelju

sender - predstavlja objekt koji je podigao dogañaj


e – objekt dogañaja koji sadrži dogañaju specifične informacije.
različiti tipovi
EventArgs
MouseEventArgs
...
4
Handles ključna riječ
Handles
deklarira da procedura rukuje odreñenim
dogañajem
omogućuje navoñenje rukovatelja dogañaja za
vrijeme stvaranja programa

5
Windows forma
Forma je osnovni element grafičkog korisničkog
sučelja.
predstavlja informacije korisniku
uzima informacije od korisnika
Forma izlaže:
svojstva
definiraju pojavljivanje forma
postupke
definiraju ponašanje forme
dogañaje
definiraju interakciju sa korisnikom

6
Hijerarhija klasa Windows formi ?
System.Windows.Forms
Control
Control
bazna klasa za sve kontrole
osnovna funkcionalnost za kontrolu, poput veličine,
ScrollableControl
vidljivosti i tabulatornog reda
ScrollableControl
nasljeñuje direktno iz Control klase ContainerControl
osigurava mogućnost “skroliranja” za kontrole koje
zahtijevaju trake za pomicanje (scroll bars)
ContainerControl Form
nasljeñuje direktno iz ScrollableControl
dodaje upravljanje fokusom i tabulatornim redom za UserControl
kontrole koje mogu spremiti druge kontrole
Forms
nasljeñuje iz ContainerControl
predstavlja prozor prikazan u programu
UserControl
nasljeñuje iz ContainerControl
prazna kontrola koja se može koristiti za stvaranje
7 vlastitih kontrola
Korištenje svojstava forme
Name
ime forme u projektu
AcceptButton i CancelButton
pridružuje po jednu kontrolu dugmeta tipkama ENTER i ESC
StartPosition
pozicija forme na ekranu
Text
tekst prikazan u naslovu formu
DialogResult
odreñivanje odabranog dugmeta dijaloškog okvira
Font
ureñivanje pisma
Opacity
prozirnost forme
MaximumSize i MinimumSize
maksimalna i minimalna veličina forme
tip Size
Height
Width
TopMost
forma ostaje ispred svih drugih prozora i kada nema fokus
8 primjer, Windows Task Manager
Korištenje postupaka forme
CenterToScreen i CenterToParent
centriranje forme na ekranu ili na roditeljskoj formi
Close
zatvaranje forme i oslobañanje resursa
Load
učitavanje (ali ne i prikazivanje) forme
Show i ShowDialog
prikaz forme na ekranu
ShowDialog prikazuje formu kao dijaloški okvir
Focus
fokusiranje forme
Hide
uklanja formu sa ekrana, ne i iz memorije
9
Korištenje dogañaja forme
Activated i Deactivate
Activated se podiže kada je forma aktivirana kroz programski
kod ili akcijom korisnika.
Deactivate se podiže kada forma gubi fokus
Closing
podiže se kada započne zatvaranje forme i omogućuje odustajanje
od zatvaranja
Closed
nastaje nakon dogañaja Closing
može se upotrijebiti za snimanje informacija sa forme
MenuStart i MenuComplete
podižu se kada izbornik prima i gubi fokus
SizeChanged
podiže se kada se mjenjaju dimenzije forme
10
Primjer 1: dogañaji forme
Korištenje dogañaja forme Activated,, Closed,, Deactivate,,
SizeChanged i ispisivanje odgovarajuće poruke.

Private Sub Form1_Activated(ByVal sender As Object, _


ByVal e As System.EventArgs) Handles MyBase.Activated
Console.WriteLine("Forma je aktivna")
End Sub
Private Sub Form1_Deactivate(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Deactivate
Console.WriteLine("Forma nije aktivna")
End Sub
Private Sub Form1_Closed(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Closed
Console.WriteLine("Forma je zatvorena")
End Sub
Private Sub Form1_SizeChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.SizeChanged
Console.WriteLine("Promjena dimenzija forme")
End Sub
11
Životni ciklus forme
Životni ciklus forme se općenito sastoji u okidanju
postupaka i dogañaja sljedećim slijedom:
1. Show()
2. Load
3. GotFocus
4. Activated
5. Closing
6. Closed
7. Deactivate
8. LostFocus
9. Dispose()

Dogañaji Enter i Leave su "ugušeni" za formu!


ekvivalentni dogañaji su Activated i Deactivate
12
Korištenje standardnih dijaloških okvira
Modalne i nemodalne forme
MsgBox
If MsgBox("Odustajanje?", _
MsgBoxStyle.OKCancel + MsgBoxStyle.Question, "Pitanje") _
= MsgBoxResult.Cancel Then
'...
End If

MsgBoxStyle i
MsgBoxResult – nabrajanja
MessageBox klasa
If MessageBox.Show("Odustajanje?", "Pitanje", _
MessageBoxButtons.OKCancel, MessageBoxIcon.Question) _
= DialogResult.Cancel Then
'...
End If

DialogResult – svojstvo forme


13 MessageBoxIcon - nabrajanje
Dodavanje i ureñivanje kontrola na formu
Dodavanje kontrola
dva načina dodavanja kontrola na formu
dodavanje izbornika na formu
Ureñivanje kontrola
izbornik Format
sadži opcije za organiziranje kontrola
poravnanje, iste dimenzije, centriranje, zaključavanje, poredak ...
postavljanje tabulatornog reda kontrola
svojstva TabIndex i TabStop
View | Tab Order
sidrenje kontrola
osigurava da rubovi kontrole budu jednako udaljeni u odnosu na roditeljski
spremnik
svojstvo Anchor
Top,, Left,, Bottom i Right
dokovanje kontrola
omogućuje “ljepljenje” rubova kontrole za rubove roditeljske kontrole
14
Korištenje kontrola Windows formi
Samo informacijske
Label,, LinkLabel
Label LinkLabel,, StatusBar
Obrada teksta
TextBox,, RichTextBox
TextBox
Naredbene
Button
Odabir iz liste
ComboBox,, DomainUpDown
ComboBox DomainUpDown,, NumericUpDown
NumericUpDown,, TreeView
Opcijske
CheckBox,, RadioButton
CheckBox
Postavljanje datuma i vremena
DateTimePicker
Grupirajuće
Panel
GroupBox
Tab
Prikaz grafike
PictureBox
15
Hijerarhija klasa kontrola

ScrollableControl ContainerControl Form

UserControl
DataGrid

ListControl ListBox CheckedListBox

ComboBox
Control

PictureBox

ButtonBase Button

CheckBox

TextBoxBase TextBox

Label

16
Korištenje svojstava i postupaka kontrola
Okvir za tekst (TextBox)
( )
Natpis (Label)
( )
opisni
izlazni
Dugme (Button)
( )
klik na dugme
AcceptButton i CancelButton svojstva forme
Okvir za potvrdu (CheckBox)
( )
Radio dugme (RadioButton)
( )
stvaranje grupa kontrola (GroupBox
( kontrola)
Okvir s popisom
rad sa stavkama
rad sa odabranim stavkama
17 Kombinirani okvir
Dodavanje kontrola za vrijeme izvoñenja
Zbirke kontrola
predstavljaju zbirku objekata izvedenih iz Control
Svojstvo Controls
koristi se Add,, Remove i RemoveAt za dodavanje i uklanjanje
kontrola iz zbirke
ostali postupci: Clear,, Contains
Count vraća broj kontrola unutar spremnika

Private Sub Button1_Click_1(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles Button1.Click
Dim textBox1 As New TextBox()
textBox1.Text = ""
textBox1.Left = 20
textBox1.Top = 100
Me.Controls.Add(textBox1)
End Sub

18
Primjer 2: Kontrola spremnika
Korištenjem zbirke kontrola forme izbrišite sav
tekst unesen u kontrole okvira za tekst.

Private Sub Button1_Click_1(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles Button1.Click
Dim item As Control
For Each item In Me.Controls
If TypeOf item Is TextBox Then
item.Text = ""
End If
Next
End Sub

19
Primjer 3: Okvir s popisom
Potrebno je sve stavke koje su istovremeno odabrane u
jednom okviru s popisom ispisati korištenjem
MessageBox dijaloškog okvira.
Listu napuniti s nekoliko stavki kada je fokus na kontroli.
Odabrane stavke ispisati kada fokus gubi kontrolu

Private Sub ListBox1_Leave(...) Handles ListBox1.Leave


Dim item As Object
For Each item In ListBox1.SelectedItems
MessageBox.Show(item)
Next
End Sub
Private Sub ListBox1_Enter(...) Handles ListBox1.Enter
With ListBox1
.SelectionMode = SelectionMode.MultiSimple
.Items.Add("Split")
.Items.Add("Zagreb")
.Items.Add("Križevci")
.Items.Add("Vukovar")
End With
20 End Sub
Primjer 4: Kombinirani okvir
Omogućiti dodavanje stavke unesene u dio za unos u listu
kombiniranog okvira.
Sprijećiti ponavljanje stavki u listi

Private Sub ComboBox1_Leave(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles ComboBox1.Leave
If ComboBox1.Text.Length > 0 Then
If ComboBox1.Items.Contains(ComboBox1.Text) Then
Exit Sub
Else
ComboBox1.Items.Add(ComboBox1.Text)
End If
End If
End Sub

21
Rukovanje dogañajima miša
Dogañaji miša nastaju klikom ili pomakom miša.
Dogañaji miša:
MouseEnter
nastaje kada pokazivač miša ulazi na područje kontrole
MouseLeave
nastaje kada pokazivač miša napušta područje kontrole
MouseDown
nastaje kada se pritisne tipka miša dok je pokazivač iznad područja
kontrole
MouseHover
nastaje kada se pokazivač miša nalazi iznad područja kontrole
MouseMove
nastaje kada se pomiče pokazivač miša iznad kontrole
MouseUp
nastaje kada se otpusti tipka miša dok je pokazivač iznad područja
kontrole
MouseWheel
22 nastaje kada se pomiće kotačić miša dok je pokazivač iznad područja
kontrole
Redoslijed nastajanja dogañaja miša
Dogañaji miša nastaju sljedećim redom:
1. MouseEnter
2. MouseMove
3. MouseHover / MouseDown / MouseWheel
4. MouseUp
5. MouseLeave

23
MouseEventArgs klasa
Sadrži informacije o dogañaju miša:
Button – odreñuje koja tipka miša je pritisnuta
MouseButtons nabrajanje
Left,, Middle,, None,, Right …
Clicks – pokazuje koliko puta je tipka pritisnuta
X, Y – koordinate dogañaja
relativne prema kontroli
X – x koordinata
Y – y koordinata
Delta – zakret kotačića miša
Dogañaji: MouseUp,, MouseDown,, MouseMove i
MouseHover
24
Primjer 2: Dogañaji miša
Pohranjivanje koordinate dogañaja klika mišem na formu
u jednodimenzionalni niz. U zaglavlju forme se ispisuje
udaljenost točke klika od ishodišta.

Private Structure Point2D


Public X, Y As Integer
Public Function Distance() As Single
Return Math.Sqrt(X ^ 2 + Y ^ 2)
End Function
End Structure
Private points As Point2D() = New Point2D(9) {}
Private Sub Form1_MouseDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseDown
Static counter As Integer
points(counter).X = e.X
points(counter).Y = e.Y
Me.Text = points(counter).Distance
counter += 1
End Sub
25
Zadatak 1: Dogañaji miša
Pohraniti linije unesene preko grafičkog sučelja u
jednodimenzionalni niz.
Početna točka linije je odreñena pritiskom jedne
tipke miša na formu a konačna točka linije
otpuštanjem iste tipke miša.
Pritiskom druge tipke miša neka se ispiše dužina
linije u naslovu forme.
UPUTE:
kreirati strukturu Point2D
kreirati klasu Line za predstavljanje linije
svojstva StartPoint, EndPoint – tip Point2D
postupak Length
upotrijebiti prikladne rukovatelje dogañajima miša radi
dohvata koordinata klika i odreñivanja pritisnute tipke.
26
Dogañaji tipkovnice
Dogañaj tipkovnice: pritisak i otpuštanje tipke
Dogañaji tipkovnice:
KeyPress
nastaje kada je pritisnuta tipka koja predstavlja ASCII znak
ASCII je znakovni skup od 128 alfanumeričkih simbola
ASCII ne podržava funkcijske tipke (F1, F2 ...)
ASCII ne podržava modifikatorske tipke (Control, Enter, Alt)
ponavlja se dok je tipka pritisnuta
KeyDown
nastaje kada je tipka pritisnuta
KeyUp
nastaje kada je tipka otpuštena

27
KeyPress dogañaj
Pojavljuje se kada je tipka pritisnuta dok kontrola
ima fokus.
e - argument tipa KeyPressEventArgs
Svojstva:
Handled
odreñuje da li je KeyPress dogañaj rukovan
postavljanjem na True poništava se daljnja obrada dogañaja
KeyChar
vraća ASCII znak pritisnute tipke

28
Primjer 3: KeyPress dogañaj
Pretvoriti malo slova uneseno u kontrolu okvira za
tekst u veliko prije nego što bude ispisano u
kontroli.

Private Sub TextBox1_KeyPress(ByVal sender As Object, _


ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles TextBox1.KeyPress
Dim letter As Char = e.KeyChar
Select Case letter
Case "a" To "z"
letter = Char.ToUpper(letter)
e.Handled = True
TextBox1.AppendText(letter)
End Select
End Sub

29
KeyUp i KeyDown dogañaji
Pojavljuju se kada je tipka pritisnuta (KeyUp)
( ) odnosno otpuštena (KeyDown).
( ).
e - argument tipa KeyEventArgs
Svojstva:
Alt - ukazuje da li je pritisnuta tipka Alt
Control - ukazuje da li je pritisnuta tipka Control
Shift - ukazuje da li je pritisnuta tipka Shift
KeyCode
vraća kod pritisnute tipke kao Keys nabrajanje
ne uključuje informacije o modifikatorskim tipkama
koristi se za testiranje odreñene tipke
KeyData
vraća kod pritisnute tipke kao Keys nabrajanje
uključuje informacije o modifikatorskim tipkama
sadrži sve informacije o pritisnutoj tipki
KeyValue
vraća kod tipke kao Integer
numeričko predstavljanje pritisnute tipke
Modifiers
vraća Keys nabrajanje za bilo koju pritisnutu modifikatorsku tipku (Alt
(Alt,,
Control i Shift
Shift))
30 koristi se samo za informaciju o modifikatorskim tipkama
Handled – odreñuje da li je dogañaj rukovan
Primjer 4: KeyUp i KeyDown dogañaji
Private Sub Form1_KeyPress(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles MyBase.KeyPress
Character.Text = "Pritisnuta tipka:" & e.KeyChar
End Sub
Private Sub Form1_KeyDown(ByVal sender As Object,
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles MyBase.KeyDown
Information.Text = ""
'ako je pritisnuta tipka ALT
If e.Alt Then
Information.Text &= "Alt: Da" & vbCrLf
Else
Information.Text &= "Alt: Ne" & vbCrLf
End If
'...
Information.Text &= "KeyCode: " & e.KeyCode.ToString & _
vbCrLf & "KeyData: " & e.KeyData.ToString & _
vbCrLf & "KeyValue: " & e.KeyValue
End Sub

31
Zadatak 2: Dogañaji tipkovnice
Potrebno je dodati funkcionalnost kontroli za tekst
tako da dozvoljava unos samo numeričkih
vrijednosti. Omogućiti povećavanje/smanjivanje
unesene vrijednosti s korakom 1 pritiskom na
tipke Up i Down.

32
Provjera korisničkog unosa
CausesValidation svojstvo
Validate dogañaj
ErrorProvider kontrola
MaskEdit kontrola
Nastajanje dogañaja kontrole
1. Enter
2. GotFocus
3. Leave
4. Validating
5. Validated
6. LostFocus
33
Validating dogañaj
Koristi se za provjeru korisničkog unosa.
Ako se svojstvo Cancel od CancelEventArgs
postavi na True fokus neće napustiti kontrolu.
Ako se svojstvo Cancel od CancelEventArgs
postavi na False podižu se Validated i
LostFocus dogañaji.
CausesValidation svojstvo odreñuje da li
prethodna kontrola sudjeluje u provjeri ispravnosti.
ako je False ne podiže se dogañaj provjere

34
Primjer: Validating dogañaj
Private Sub NumericBox_KeyPress(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles MaxBox.KeyPress, MinBox.KeyPress
e.Handled = True
If e.KeyChar.IsDigit(e.KeyChar) Then
sender.AppendText(e.KeyChar)
End If
End Sub
Private Sub NumericBox_KeyDown(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles MaxBox.KeyDown, MinBox.KeyDown
If e.KeyCode = Keys.Up Then sender.Text += 1
If e.KeyCode = Keys.Down Then sender.Text -= 1
End Sub
Private Sub MaxBox_Validating(ByVal sender As System.Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles MaxBox.Validating
If CInt(MinBox.Text) >= CInt(MaxBox.Text) Then
e.Cancel = True : MessageBox.Show("Mora biti MAKS>MIN!")
End If
End Sub
35

You might also like