predavanje11

Download Report

Transcript predavanje11

RP3/predavanje11
 Windows forme (2.dio)
09/04/2015
---------- Računarski praktikum 3 ---------Maja Starčević
1
Kontrole
CheckBox – koristi se za prikaz binarnog stanja objekta,
klikom se prebacuje iz označenog u neoznačeno stanje
CheckedListBox – ListBox sa stupcem CheckBox kontrola
(olakšava odabir više stavki)
ComboBox – padajući izbornik stavki. Sličan je po funkciji
kontroli ListBox, samo je kompaktniji.
DataGridView – Kontrola koja omogućava povezivanje
programa s izvorom podataka
09/04/2015
Računarski praktikum 3
2
Kontrole
DateTimePicker – kontrola za biranje datuma i vremena
DomainUpDown – omogućuje klizanje kroz popis stavki
podataka od kojih se samo jedna može istovremeno
prikazati
LinkLabel – isto kao i kontrola Label, ali sadrži URL za skok
na internetsku adresu
ListBox – sadrži popis stavki (i kliznu traku ako ih je previše
za prikaz)
09/04/2015
Računarski praktikum 3
3
Kontrole
ListView – sofisticiranija kontrola od ListBox. Omogućuje
prikaz u više stupaca, naslove stupaca, promjenu veličine,
razvrstavanje popisa
MonthCalendar – vizualna kalendarska kontrola (dosta
sličnosti s kontrolom DateTimePicker)
NumericUpDown – slično kao DomainUpDown samo što
sadrži samo numeričke stavke
PictureBox – kontrola za prikaz slike
09/04/2015
Računarski praktikum 3
4
Kontrole
ProgressBar – kontrola za prikaz statusa operacije u tijeku.
Sadrži grafički indikator za prikaz postotka napredovanja
operacije
PropertyGrid – koristi se za postavljenje i prikaz popisa
svojstava povezanih s određenom komponentom
RichTextBox – naprednija verzija TextBox kontrole koja
pruža bolji nadzor nad tekstom
09/04/2015
Računarski praktikum 3
5
Kontrole
ToolTip – kontrola koja omogućuje stvaranje poruke koja se
pojavljuje kad se kursor ostavi nekoliko trenutaka iznad
kontrole
TreeView – kontrola koja prikazuje stavke na hijerarhijski
način
WebBrowser – kontrola koja omogućuju pregled Web
stranica unutar forme.
09/04/2015
Računarski praktikum 3
6
NumericUpDown
numericUpDown1.Value = 1;
numericUpDown1.Minimum = -5;
numericUpDown1.Maximum = 5;
numericUpDown1.DecimalPlaces = 1;
numericUpDown1.Increment=0.1M;
Ako se ne postave ove vrijednosti, minimum je 0, maksimum
100, početna vrijednost je nula i ne prikazuju se decimalna
mjesta.
09/04/2015
Računarski praktikum 3
7
DomainUpDown
DomainUpDown d = new DomainUpDown();
d.Items.Add("jabuka");
d.Items.Add("marelica");
d.Items.Add("ananas");
d.Items.Insert(1, "mango");
d.Sorted = true;
d.Wrap=true;
Kad dođemo
do kraja popisa,
vraćamo se na početak
09/04/2015
Računarski praktikum 3
8
ToolTip
button = new Button();
toolTip = new ToolTip();
button.Location = new Point(50, 50);
button.AutoSize = true;
button.Text = "Dođi iznad gumba i pričekaj";
button.BackColor = Color.White;
toolTip.ToolTipTitle = "Uputa:";
toolTip.IsBalloon = false;
toolTip.ShowAlways = true;
toolTip.SetToolTip(button, "Pritisni gumb.");
Controls.Add(button);
09/04/2015
Računarski praktikum 3
9
MonthCalendar
Uz Application.EnableVisualStyles();
09/04/2015
Računarski praktikum 3
10
MonthCalendar
monthCalendar1.ShowToday = false;
monthCalendar1.ShowTodayCircle = false;
09/04/2015
Računarski praktikum 3
11
MonthCalendar
label = new Label();
monthCalendar= new MonthCalendar();
Controls.Add(monthCalendar);
Controls.Add(label);
monthCalendar.MaxSelectionCount = 14;
monthCalendar.DateSelected += monthCalendar_DateSelected;
………………
void monthCalendar_DateSelected(object sender, DateRangeEventArgs e)
{
label.Text = "Izabran je period od " +
monthCalendar.SelectionStart.ToShortDateString() +
" do " + monthCalendar.SelectionEnd.ToShortDateString();
}
09/04/2015
Računarski praktikum 3
12
MonthCalendar
09/04/2015
Računarski praktikum 3
13
DateTimePicker
public class Form1 : Form
{
DateTimePicker dateTimePicker;
Label label;
public Form1()
{
InitializeComponent();
dateTimePicker = new DateTimePicker();
label = new Label();
dateTimePicker.Format = DateTimePickerFormat.Short;
dateTimePicker.ShowUpDown = true;
dateTimePicker.Format = DateTimePickerFormat.Custom;
dateTimePicker.CustomFormat = "dd.MM.yyyy. hh:mm:ss"
dateTimePicker.Location = new Point(10, 10);
dateTimePicker.Width = 150;
label.Location = new Point(200, 10);
label.AutoSize = true;
09/04/2015
Računarski praktikum 3
14
DateTimePicker
dateTimePicker.ValueChanged += new EventHandler(dateTimePicker_ValueChanged);
Controls.Add(dateTimePicker);
Controls.Add(label);
}
void dateTimePicker_ValueChanged(object sender, EventArgs e)
{
IFormatProvider culture1 = new CultureInfo("hr-HR");
IFormatProvider culture2 = new CultureInfo("fr-FR");
U prostoru
string dateTime1 = dateTimePicker.Value.ToString(culture1);
System.Globalization
string dateTime2 = dateTimePicker.Value.ToString(culture2);
label.Text = "hrvatski datum i vrijeme " + dateTime1 + "\n\n" +
"francuski datum i vrijeme " + dateTime2;
}
09/04/2015
Računarski praktikum 3
15
DateTimePicker
timePicker.ShowUpDown =false;
09/04/2015
Računarski praktikum 3
16
ProgressBar, Timer
09/04/2015
Računarski praktikum 3
17
ProgressBar, Timer
public class Form1 : Form
{
Timer timer1;
ProgressBar progressBar1;
ListBox listBox1;
int counter;
public Form1()
{
progressBar1 = new ProgressBar();
Label label1 = new Label();
listBox1 = new ListBox();
label1.Location = new Point(20, 20);
progressBar1.Minimum = 0;
progressBar1.Maximum = 20;
Controls.AddRange(new Control[] { progressBar1, listBox1 });
09/04/2015
Računarski praktikum 3
18
ProgressBar, Timer
timer1 = new Timer();
timer1.Interval = 5000;
timer1.Enabled = true;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
}
private void timer1_Tick(object sender, System.EventArgs e)
{
if (counter >= 10)
{
timer1.Enabled = false;
}
else
{
counter++;
progressBar1.Increment(1);
listBox1.Items.Add(DateTime.Now.ToString());
}
}
}
09/04/2015
Računarski praktikum 3
19
Zadatak
Napravite aplikaciju koja se sastoji od jedne forme s dva panela.
U prvom se nalazi ploča 3 × 3 u kojoj su sva polja u početku
obojana bijelo. U drugom panelu nalaze se gumb Start, Stop,
dva TextBox-a, jedna labela i jedan ProgressBar.
Pritiskom na Start, u zadanom vremenskom intervalu se
slučajnim odabirom tri polja obojaju u plavo i tako dalje periodički.
Cilj igre je pogoditi što više plavih polja.
U labeli se zapisuje broj pogođenih plavih polja. Pritiskom na Stop
igra se zaustavlja i dobiva se MessageBox da je igra prekinuta.
Ako je igra završila u zadanom vremenu, dobiva se MessageBox o broju
pogođenih polja. Kontrola ProgressBar pokazuje koliko još ima do isteka
igre. Preko TextBox kontrola se može unijeti brzina izmjenjivanja
plavih polja i vrijeme trajanja igre.
09/04/2015
Računarski praktikum 3
20
TreeView
09/04/2015
Računarski praktikum 3
21
TreeView
public class Form1 : Form
{
public Form1()
{
this.treeView1 = new TreeView();
this.treeView1.Location = new Point(16, 50);
this.treeView1.Margin = new Padding(4);
this.treeView1.Size = new System.Drawing.Size(286, 313);
this.Controls.Add(this.treeView1);
this.ClientSize = new System.Drawing.Size(316, 390);
this.Margin = new System.Windows.Forms.Padding(4);
this.Text = "Form1";
TreeNode parniBrojevi = treeView1.Nodes.Add("Parni Brojevi");
TreeNode neparniBrojevi = treeView1.Nodes.Add("Neparni brojevi");
09/04/2015
Računarski praktikum 3
22
TreeView
for (int i = 1; i < 20; i++)
{
if (i % 2 == 0)
{
parniBrojevi.Nodes.Add(i.ToString());
}
else
{
neparniBrojevi.Nodes.Add(i.ToString() );
}
}
}
private System.Windows.Forms.TreeView treeView1;
}
09/04/2015
Računarski praktikum 3
23
WebBrowser
09/04/2015
Računarski praktikum 3
24
WebBrowser
private void goButton_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(textURL.Text);
}
private void homeButton_Click(object sender, EventArgs e)
{
webBrowser1.GoHome();
}
private void backButton_Click(object sender, EventArgs e)
{
webBrowser1.GoBack();
}
private void forwardButton_Click(object sender, EventArgs e)
{
webBrowser1.GoForward();
}
09/04/2015
Računarski praktikum 3
25
WebBrowser
private void webBrowser1_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.CanGoBack)
{
backButton.Enabled = true;
}
else
{
backButton.Enabled = false;
}
if (webBrowser1.CanGoForward)
{
forwardButton.Enabled = true;
}
else
{
forwardButton.Enabled = false;
}
}
09/04/2015
Računarski praktikum 3
26
Panel
Panel kontrola služi za grupiranje elemenata. Slična je
GroupBox kontroli, ali za razliku od GroupBox kontrole može
imati kliznu traku (Panel.AutoScroll=true), dok ne sadrži
naslov.
Kontrolama se može standardno pristupati pomoću kolekcije
Controls (kolekcija sadrži objekte tipa Control pa je potreban
downcasting).
Button b = (Button)panel1.Controls[0];
09/04/2015
Računarski praktikum 3
27
FlowLayoutPanel
Spremnici tipa FlowLayoutPanel
09/04/2015
Računarski praktikum 3
28
FlowLayoutPanel
.....
this.Size = new Size(300, 300);
FlowLayoutPanel flp1 = new FlowLayoutPanel();
FlowLayoutPanel flp2 = new FlowLayoutPanel();
FlowLayoutPanel flp3 = new FlowLayoutPanel();
flp1.BorderStyle = BorderStyle.FixedSingle;
flp2.BorderStyle = BorderStyle.FixedSingle;
flp3.BorderStyle = BorderStyle.FixedSingle;
flp1.Location = new Point(6, 10);
flp1.Size = new Size(280, 135);
flp2.Location = new Point(6, 150);
flp2.Size = new Size(138, 110);
flp3.Location = new Point(148, 150);
flp3.Size = new Size(138, 110);
09/04/2015
Računarski praktikum 3
29
FlowLayoutPanel
flp1.Anchor =
AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
flp2.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
flp3.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
Button b1 = new Button();
Button b2 = new Button();
Button b3 = new Button();
Button b4 = new Button();
b1.Text = "button1";
b2.Text = "button2";
b3.Text = "button3";
b4.Text = "button4";
09/04/2015
Računarski praktikum 3
30
FlowLayoutPanel
this.Controls.Add(flp1);
this.Controls.Add(flp2);
this.Controls.Add(flp3);
flp1.Controls.Add(b1);
flp1.Controls.Add(b2);
flp2.Controls.Add(b3);
flp2.Controls.Add(b4);
09/04/2015
Računarski praktikum 3
31
FlowLayoutPanel
Razvučemo formu
09/04/2015
Računarski praktikum 3
32
FlowLayoutPanel
Zadatak:
Prepravite kod tako
da se dobije sljedeće.
09/04/2015
Računarski praktikum 3
33
FlowLayoutPanel
public class Form1 : Form
{
FlowLayoutPanel flp;
public Form1()
{
FlowLayoutPanel flp = new FlowLayoutPanel();
flp.BackColor = Color.Indigo;
flp.Size = new Size(200, 200);
flp.FlowDirection = FlowDirection.TopDown;
// flp.WrapContents = false;
Controls.Add(flp);
09/04/2015
Računarski praktikum 3
34
FlowLayoutPanel
for (int i = 1; i < 16; ++i)
{
Button b = new Button();
b.Text = "gumb " + i;
b.BackColor = Color.WhiteSmoke;
flp.Controls.Add(b);
}
}
}
//ako maknemo komentar na prethodnom slajdu
09/04/2015
Računarski praktikum 3
35
DragDrop
Primjer:
Povlačenjem gumba DragDrop i ispuštanjem iznad Panel spremnika,
smještamo taj gumb u spremnik. Pritiskom na gumb Cancel, vraćamo ga
natrag na početnu poziciju.
09/04/2015
Računarski praktikum 3
36
DragDrop
public partial class Form1 : Form
{
Button button1 = new Button();
Button button2 = new Button();
Panel panel1 = new Panel();
public Form1()
{
panel1.BorderStyle = BorderStyle.Fixed3D;
panel1.BackColor = Color.Azure;
panel1.Size = new Size(170, 100);
panel1.Location = new Point(10, 10);
button1.Text = "DragDrop";
button1.Location = new Point(10, 120);
button1.Size = new Size(80, 30);
09/04/2015
Računarski praktikum 3
37
DragDrop
button2.Text = "Cancel";
button2.Location = new Point(200, 10);
button1.MouseDown += button1_MouseDown;
button2.Click += button2_Click;
panel1.DragDrop += panel1_DragDrop;
panel1.DragOver += panel1_DragOver;
panel1.AllowDrop = true;
Controls.Add(panel1);
Controls.Add(button1);
Controls.Add(button2);
}
09/04/2015
Računarski praktikum 3
38
DragDrop
private void button1_MouseDown(object sender, MouseEventArgs e)
{
DoDragDrop(button1, DragDropEffects.Move);
}
private void button2_Click(object sender, EventArgs e)
{
Controls.Add(button1);
button1.Location = new Point(10, 120);
}
09/04/2015
Računarski praktikum 3
39
DragDrop
private void panel1_DragDrop(object sender, DragEventArgs e)
{
button1.Location = panel1.PointToClient(new Point(e.X, e.Y));
panel1.Controls.Add(button1);
}
private void panel1_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
}
09/04/2015
Računarski praktikum 3
40
Zadatak
Napravite formu s panelom i gumbom. Povlačenjem i ispuštanjem
iznad panela, tekst se prebacuje s gumba na panel (napravite i verziju s
kopiranjem teksta (drugi tip efekta)).
09/04/2015
Računarski praktikum 3
41
Zadatak
Napravite aplikaciju “Spremi gumbe u panel”. Aplikacija prikazuje jednu formu na kojoj se s
lijeva nalazi spremnik tipa Panel. Imamo i dvije kontrole tipa NumericUpDown pomoću koje
možemo povećavati i smanjivati veličinu panela. Prozoru se može mijenjati veličina. Panel je
uvijek jednako udaljen od lijevog i gornjeg ruba prozora.
U prozoru se nalazi i gumb G1 kojeg želimo povlačenjem i ispuštanjem prebaciti u panel.
Kad to napravimo, na njegovom početnom položaju pojavi se gumb G2, itd.
Pri ubacivanju gumba u panel, gumb se uvijek smješta u isti red kao i prethodni gumb ako
ima dovoljno vidljivog mjesta, inače se smješta u sljedeći red (između dva gumba nema
razmaka). Kad oznaka povlačenja uđe u prostor panela, panel mora promijeniti boju i vratiti
se na staru nakon ispuštanja gumba.
Sa strane postoje i dvije kontrole tipa NumericUpDown kojima možemo povećavati i
smanjivati duljinu i širinu panela. Pritom se gumbi možda moraju presložiti na način da je
uvijek ispunjen cijeli prvi red pa cijeli drugi red itd. Veličina se s te dvije kontrole može
smanjiti samo toliko da svi gumbi u panelu budu vidljivi. Također ne smijemo povećati
veličinu panela tako da prekriva ostale kontrole u prozoru. Ako u panelu nema dovoljno
mjesta da se ispusti gumb i da svi gumbi budu vidljivi, panel neće primiti gumb.
Ukoliko kliknemo na neki od gumbova u panelu, on se miče iz panela, a ostali gumbi se
moraju presložiti na već opisan način.
Gumb i NumericUpDown kontrole su pri razvlačenju prozora uvijek jednako udaljeni od
donjeg i desnog ruba prozora. Prozor se ne smije suziti do te mjere da kontrole postanu
dijelom nevidljive.
09/04/2015
Računarski praktikum 3
42
OnResize
protected override void OnResize(System.EventsArgs e)
{
base.OnResize(e);
.......
}
Metoda OnResize iz bazne klase objavljuje događaj Resize. Kod
izvedenih klasa (kao što je Form1) preporučljivo je dodati kod koji
reagira na događaj u ovakav tip metode umjesto standardnog načina
prijave za događaj.
09/04/2015
Računarski praktikum 3
43
OnResize
public class Form1 : Form
{
Label label;
bool firstResize1 = true;
bool firstResize2 = true;
public Form1()
{
label = new Label();
label.AutoSize = true;
Controls.Add(label);
this.Resize += _Resize;
}
09/04/2015
Računarski praktikum 3
44
OnResize
void _Resize(object sender, EventArgs e)
{
if (firstResize1)
{
label.Text+="_Resize metoda prijavljena za dogadjaj. ";
firstResize1 = false;
}
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
// Što se događa ako iskomentiramo ovaj redak?
if(firstResize2)
{
label.Text += "Dodatni kod iz OnResize metode u izvedenoj klasi. ";
firstResize2 = false;
}
}
09/04/2015
Računarski praktikum 3
45
Resize
ResizeBegin, Resize i ResizeEnd događaji se objavljuju kad
se forma razvlači.
ResizeBegin i ResizeEnd se objavljuju i kad se forma
pomiče (ne uzrokuje ih promjena svojstava Size i Location).
SizeChanged se objavljuje kad se promijeni svojstvo Size
(bilo u kodu ili preko korisničkog sučelja).
09/04/2015
Računarski praktikum 3
46
SplitContainer
SplitContainer je spremnik koji se sastoji
od dva spremnika tipa SplitterPanel
(Panel1 za gornji ili lijevi te Panel2 za donji
ili desni spremnik). Korisnik može mijenjati
veličinu ta dva spremnika.
SplitContainer sc = new SplitContainer();
sc.Orientation = Orientation.Horizontal;
sc.BorderStyle = BorderStyle.FixedSingle;
this.Controls.Add(sc);
Button b1 = new Button();
Button b2 = new Button();
sc.Panel1.Controls.Add(b1);
sc.Panel2.Controls.Add(b2);
09/04/2015
Računarski praktikum 3
47
Primjer: SplitContainer
SplitContainer2.Panel1
SplitContainer1.Panel1
(npr. za kontrolu
TreeView)
SplitContainer2.Panel2
SplitContainer1.Panel2
09/04/2015
Računarski praktikum 3
48
Primjer: SplitContainer
FixedPanel
09/04/2015
Računarski praktikum 3
49
Primjer: SplitContainer
public class Form1 : Form
{
SplitContainer splitContainer1;
SplitContainer splitContainer2;
public Form1()
{
splitContainer1 = new SplitContainer();
splitContainer2 = new SplitContainer();
09/04/2015
Računarski praktikum 3
50
Primjer: SplitContainer
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.Location = new System.Drawing.Point(0, 0);
splitContainer1.Panel2MinSize = 20;
splitContainer1.Size = new System.Drawing.Size(292, 273);
splitContainer1.SplitterDistance = 79; //udaljenost splittera
// od lijevog ili gornjeg ruba
splitContainer1.SplitterIncrement = 5;
splitContainer1.SplitterWidth = 6;
splitContainer1.Panel1.BackColor =SystemColors.Window;
splitContainer1.Panel2.Controls.Add(splitContainer2);
09/04/2015
Računarski praktikum 3
51
Primjer: SplitContainer
splitContainer2.Dock = DockStyle.Fill;
splitContainer2.FixedPanel = FixedPanel.Panel1; //Panel1 je fiksiran
splitContainer2.Location = new Point(0, 0);
// kod razvlačenja
splitContainer2.Orientation =
System.Windows.Forms.Orientation.Horizontal;
splitContainer2.Size = new Size(207, 273);
splitContainer2.SplitterDistance = 125;
splitContainer2.SplitterWidth = 3;
splitContainer2.Panel1.BackColor =SystemColors.Window;
splitContainer2.Panel2.BackColor =SystemColors.Window;
ClientSize = new System.Drawing.Size(292, 273);
Controls.Add(splitContainer1);
}
}
09/04/2015
Računarski praktikum 3
52
Primjer: SplitContainer
Obrada nekih događaja (promjena tipa kursora):
splitContainer1.SplitterMoving +=
new SplitterCancelEventHandler(splitContainer1_SplitterMoving);
splitContainer1.SplitterMoved +=
new SplitterEventHandler(splitContainer1_SplitterMoved);
.......................
private void splitContainer1_SplitterMoving(object sender, SplitterCancelEventArgs e)
{
Cursor.Current = Cursors.NoMoveVert;
}
private void splitContainer1_SplitterMoved(object sender, SplitterEventArgs e)
{
Cursor.Current = Cursors.Default;
}
09/04/2015
Računarski praktikum 3
53
Zadatak
Napravite aplikaciju koja ima jednu formu na kojoj se nalaze dva spremnika tipa
SplitContainer (lijevo i desno). Svaki od spremnika popunjava polovinu površine
forme, odnosno cijela forma je prekrivena s ta dva spremnika i kad ju razvučemo.
Spliteri svakog spremnika moraju biti postavljeni vodoravno.
Isto tako, ukoliko pomičemo spliter jednog od ta dva spremnika, spliter drugog
spremnika se ponaša simetrično, tj. spliter prvog spremnika je jednako udaljen od
gornjeg ruba klijent dijela forme, kao što je spliter desnog od donjeg ruba forme.
09/04/2015
Računarski praktikum 3
54
TabControl
this.tabControl1.SelectedIndex = 1;
09/04/2015
Računarski praktikum 3
this.tabControl1.Multiline = true;
55
TableLayOutPanel
TableLayoutPanel je spremnik u koji se kontrole smještaju
kao u tablicu. Dobro je rješenje za kontrolu rasporeda pri
promjeni veličine forme.
TableLayoutPanel tableLayoutPanel1;
Button button00 = new Button();
Button button10= new Button();
Button button01= new Button();
Button button11= new Button();
09/04/2015
Računarski praktikum 3
56
TableLayOutPanel
tableLayoutPanel1 = new TableLayoutPanel();
tableLayoutPanel1.ColumnCount = 2;
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle());
tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle());
tableLayoutPanel1.Controls.Add(this.button00, 0, 0);
tableLayoutPanel1.Controls.Add(this.button10, 1, 0);
tableLayoutPanel1.Controls.Add(this.button01, 0, 1);
tableLayoutPanel1.Controls.Add(this.button11, 1, 1);
Controls.Add(tableLayoutPanel1);
09/04/2015
Računarski praktikum 3
57
TableLayOutPanel
public Form1
{
TableLayoutPanel pnl = new TableLayoutPanel();
pnl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30));
pnl.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 70));
pnl.Dock = DockStyle.Fill;
this.Controls.Add(pnl);
Button btn1 = new Button();
btn1.Text = "No margin";
btn1.Dock = DockStyle.Fill;
Button btn2 = new Button();
btn2.Margin = new Padding(25);
btn2.Text = "Margin";
btn2.Dock = DockStyle.Fill;
pnl.Controls.Add(btn1, 0, 0);
pnl.Controls.Add(btn2, 1, 0)
}
09/04/2015
Računarski praktikum 3
58
ToolStrip
Klasa ToolStrip se koristi za kreiranje alatne trake.
Sofisticiranija je verzija klase Toolbar koju je i dalje moguće
koristiti. Analogno je MenuStrip nova verzija klase Menu, a
StatusStrip zamjena za StatusBar.
ToolStripPanel – koristi se kao spremnik za jedan ili više
objekata tipa ToolStrip, MenuStrip, StatusStrip
ToolStripProgressBar – kombinira neke svojstva klase
ToolStrip s klasom ProgressBar
ToolStripStatusLabel – oznaka (label) za StatusStrip
09/04/2015
Računarski praktikum 3
59
ToolStrip
09/04/2015
Računarski praktikum 3
60
ToolStripContainer
Klasa ToolStripContainer sadrži svojstva TopToolStripPanel,
LeftToolStripPanel, RightToolStripPanel,
BottomToolStripPanel (predstavljaju ploče sa trakama sa
svake strane kontrole) i svojstvo ToolStripContentPanel za
središnju ploču.
Na četiri rubne ploče smještaju se kontrole tipa ToolStrip,
MenuStrip i StatusStrip, dok se na središnju ploču smještaju
ostale kontrole.
09/04/2015
Računarski praktikum 3
61
ToolStripContainer
Primjer 1:
TopToolStripPanel
RightToolStripPanel
LeftToolStripPanel
09/04/2015
Računarski praktikum 3
62
ToolStripContainer
public class Form1 : Form
{
private ToolStripContainer toolStripContainer;
private ToolStrip topToolStrip;
private ToolStrip leftToolStrip;
private ToolStrip rightToolStrip;
public Form1()
{
toolStripContainer = new ToolStripContainer();
topToolStrip = new ToolStrip();
leftToolStrip = new ToolStrip();
rightToolStrip = new ToolStrip();
09/04/2015
Računarski praktikum 3
63
ToolStripContainer
toolStripContainer.Dock=DockStyle.Fill;
topToolStrip.Dock=DockStyle.Top;
leftToolStrip.Dock=DockStyle.Left;
rightToolStrip.Dock=DockStyle.Right;
toolStripContainer.TopToolStripPanel.Controls.Add(topToolStrip);
toolStripContainer.LeftToolStripPanel.Controls.Add(leftToolStrip);
toolStripContainer.RightToolStripPanel.Controls.Add(rightToolStrip);
Controls.Add(toolStripContainer);
}
}
09/04/2015
Računarski praktikum 3
64
ToolStripContainer
Primjer 2:
ToolStripContainer.TopToolStripPanel
ToolStripContainer
MenuStrip
ToolStrip
09/04/2015
Računarski praktikum 3
65
ToolStripContainer
public partial class Form1 : Form
{
ToolStripContainer toolStripContainer=new ToolStripContainer();
ToolStrip toolStrip=new ToolStrip();
MenuStrip menuStrip= new MenuStrip();
ToolStripMenuItem fileToolStripMenuItem = new ToolStripMenuItem();
ToolStripMenuItem menuOpenToolStripMenuItem = new ToolStripMenuItem();
ToolStripMenuItem menuSaveToolStripMenuItem = new ToolStripMenuItem();
ToolStripMenuItem toolOpenToolStripMenuItem = new ToolStripMenuItem();
ToolStripMenuItem toolSaveToolStripMenuItem = new ToolStripMenuItem();
09/04/2015
Računarski praktikum 3
66
ToolStripContainer
public Form1()
{
InitializeComponent();
this.fileToolStripMenuItem.Text = "&File";
this.menuOpenToolStripMenuItem.Text = "open";
this.menuSaveToolStripMenuItem.Text = "save";
this.toolOpenToolStripMenuItem.Text = "open";
this.toolSaveToolStripMenuItem.Text = "save";
this.toolStripContainer.Dock = DockStyle.Fill;
this.toolStrip.Dock = DockStyle.Top;
09/04/2015
Računarski praktikum 3
67
ToolStripContainer
this.toolStripContainer.TopToolStripPanel.Controls.Add(toolStrip);
this.toolStripContainer.TopToolStripPanel.Controls.Add(menuStrip);
this.menuStrip.Items.Add(this.fileToolStripMenuItem);
this.fileToolStripMenuItem.DropDownItems.Add(menuOpenToolStripMenuItem);
this.fileToolStripMenuItem.DropDownItems.Add(menuSaveToolStripMenuItem);
this.toolStrip.Items.Add(this.toolOpenToolStripMenuItem);
this.toolStrip.Items.Add(this.toolSaveToolStripMenuItem);
Controls.Add(toolStripContainer);
}
}
09/04/2015
Računarski praktikum 3
68
Focus
Fokus se može mijenjati mijenjati pomoću miša, preko
tipkovnice (TAB, SHIFT+TAB), pozivom metoda Select,
SelectNextControl, Focus ili preko svojstva
System.Windows.Forms.ContainerControl.ActiveControl.
09/04/2015
Računarski praktikum 3
69
TabIndex
Pomoću ovog svojstva postavlja se tab redoslijed kontrola u
nekom spremniku. TabIndex može biti bilo koji prirodan broj
(manji broj označava prednost u tom poretku).
Da bi kontrola bila uključena u taj poredak, mora moći primiti
fokus (namješta se pomoću svojstva TabStop=true).
Ukoliko se tab indeksi dviju kontrola podudaraju, primijenjuje
se z-order (dubinski poredak).
Za podešavanje z-poretka koriste se metode BringToFront()
i SendToBack().
09/04/2015
Računarski praktikum 3
70
z-order
Smještanje kontrola u kolekciju Controls teče u skladu sa
z-poretkom.
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
ili
this.Controls.AddRange(new Control[] {button3, button2, button1} );
09/04/2015
Računarski praktikum 3
71
Fokus
button1.TabStop = true;
button1.TabIndex = 1;
button2.TabStop = true;
button2.TabIndex = 1;
button3.TabStop = true;
button3.TabIndex = 1;
09/04/2015
Redoslijed kojim
kontrole primaju fokus:
button3
button2
button1
button1.TabIndex = 1;
button2.TabIndex = 2;
button3.TabIndex = 3;
button1
button2
button3
button2.TabStop=false;
button1
button3
Računarski praktikum 3
72
Fokus
Controls.AddRange(
new Control[] { button1, button2, button3 });
public partial class Form1 : Form
{
Button button1 = new Button();
Button button2 = new Button();
Button button3 = new Button();
Label label = new Label();
foreach (Control control in Controls)
{
control.GotFocus+=new EventHandler(_GotFocus);
control.TabIndex = 1;
}
public Form1()
{
InitializeComponent();
button2.SendToBack();
this.ActiveControl = button3;
Controls.Add(label);
label.AutoSize=true;
button1.Location=new Point(0,0);
button2.Location=new Point(0,30);
button3.Location=new Point(0,60);
label.Location = new Point(90, 0);
button1.Tag="crvenom";
button2.Tag="zelenom";
button3.Tag="plavom";
}
void _GotFocus(object sender, EventArgs e)
{
label.Text = "Fokus je na " +
((Button)sender).Tag + “ gumbu";
}
}
Na kojoj kontroli je fokus na početku i koji je dalje redoslijed?
09/04/2015
73
KeyCode
Primjer: Događaj KeyUp se objavljuje otpuštanjem tipke na
tipkovnici ako je fokus na kontroli button3.
button3.KeyUp += new KeyEventHandler(_KeyUp);
public void _KeyUp(object sender, KeyEventArgs e)
{
MessageBox.Show(e.KeyCode.ToString(), "Your input");
}
09/04/2015
Računarski praktikum 3
74
KeyCode
public Keys KeyCode { get; }
Članovi pobrojanog tipa Keys:
A, B, C, ... D0, D1, D2, ...
Alt, Back, Delete,
End, Enter, F1, F2, ...
Insert, PageDown, PageUp,
Shift, Space...
09/04/2015
Računarski praktikum 3
75
KeyCode
Napomena: Enumeracija Keys ne pruža način da se utvrdi jesu li
aktivirani CAPS LOCK ili NUM LOCK.
Za to služi metoda IsKeyLocked iz klase Control.
public static bool IsKeyLocked( Keys keyVal )
Pomoću nje možemo ispitivati jesu li uključeni Caps Lock i
Num Lock.
09/04/2015
Računarski praktikum 3
76
KeyPreview
Kad je svojstvo KeyPreview forme postavljeno na true, forma
će objaviti događaje KeyPress, KeyDown i KeyUp, odnosno
forma će uhvatiti tipku i tek onda će se proslijediti kontroli forme
na kojoj je fokus.
Da bi se spriječilo to prosljeđivanje, potrebno je postaviti svojstvo
KeyPressEventArgs.Handled na true.
U sljedećem primjeru će forma u labelu ispisivati znakove s
tipkovnice, a Textbox kontrola neće primati nikakve znakove
iako je na njoj fokus.
09/04/2015
Računarski praktikum 3
77
KeyPreview
public partial class Form1 : Form
{
TextBox textBox1 = new TextBox();
Label label1 = new Label();
public Form1()
{
InitializeComponent();
textBox1.Location = new Point(0, 0);
label1.Location = new Point(0, 60);
label1.AutoSize = true;
label1.Text = "";
textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
this.KeyPress += new KeyPressEventHandler(Form1_KeyPress);
this.KeyPreview = true;
Controls.Add(textBox1);
Controls.Add(label1);
}
09/04/2015
Računarski praktikum 3
78
KeyPreview
void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
label1.Text += e.KeyChar.ToString()+" " + "iz forme" + " ";
e.Handled = true;
}
void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
label1.Text += e.KeyChar.ToString() + " " + "iz kontrole" + " ";
}
}
Što se događa ako e.Handled=true; premjestimo u metodu textBox1_KeyPress?
09/04/2015
Računarski praktikum 3
79
Zadatak
U prozoru se nalazi gumb. Klikom na gumb kursor miša postaje
nevidljiv te se ponovno pojavljuje na formi u nekom drugačijem,
obliku i to ukoliko se unese niz znakova “show” ili
ako je prošlo 10 sekundi. U nekoj labeli pratite tekst koji se
upisuje.
09/04/2015
Računarski praktikum 3
80
ModifierKeys
Jesu li pritisnute tipke SHIFT, CTRL i ALT možemo provjeriti
pomoću statičkog read-only Control.ModifierKeys svojstva.
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if ((Control.ModifierKeys == Keys.Alt) && (e.KeyCode == Keys.F3))
this.Close();
}
09/04/2015
Računarski praktikum 3
81
TextBox
Primjer: kontrola tipa TextBox za unos lozinke.
passwordBox = new TextBox();
passwordBox.PasswordChar = '*';
passwordBox.Multiline = false;
passwordBox.Text = "Neki tekst";
passwordBox.SelectionStart=0;
passwordBox.SelectionLength=passwordBox.Text.Length;
Primjer: MaskedTextBox
maskedTextBox1.Mask = "(999)000-0000";
09/04/2015
Računarski praktikum 3
82
Graphics
Klasa Graphics sadrži metode za crtanje raznih objekata.
Objekt tipa Graphics može se kreirati na više načina:
Referenca se može dobiti pomoću objekta PaintArgs (skup
argumenata za Paint događaj kontrole), pomoću metode
CreateGraphics() ili pomoću instance klase izvedene iz
klase Image.
Bitmap myBitmap = new Bitmap(@"C:\test\slika.bmp");
Graphics g = Graphics.FromImage(myBitmap);
09/04/2015
Računarski praktikum 3
83
Graphics
Da bi crtali po formi, možemo
nadjačati virtualnu metodu
OnPaint iz klase Control.
09/04/2015
Računarski praktikum 3
84
Graphics
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Pen myPen = new Pen(Color.Red);
e.Graphics.DrawLine(myPen, 0, 200, 100, 200);
e.Graphics.DrawString("Naslov",
new System.Drawing.Font("Times New Roman", 16),
new System.Drawing.SolidBrush(System.Drawing.Color.Magenta),
new System.Drawing.Point(30, 0));
e.Graphics.DrawEllipse(myPen, new Rectangle(100, 150, 100, 100));
myPen.Dispose();
}
09/04/2015
Računarski praktikum 3
85
LinearGradientBrush
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
LinearGradientBrush linGrBrush = new LinearGradientBrush(
new Point(0, 0),
new Point(this.Width, 0),
Color.FromArgb(255, 200, 20, 255),
Color.FromArgb(200, 45,200, 255));
e.Graphics.FillRectangle(linGrBrush, 0, 0, this.Width,30);
e.Graphics.DrawString("Naslov",
new System.Drawing.Font("Times New Roman", 16),
new System.Drawing.SolidBrush(System.Drawing.Color.White),
new System.Drawing.Point(10, 0));
}
09/04/2015
Računarski praktikum 3
86
Region
Sljedeći kod prikazuje formu u obliku kruga.
System.Drawing.Drawing2D.GraphicsPath path = new
System.Drawing.Drawing2D.GraphicsPath();
path.AddEllipse(0, 0, 300, 300);
Form f=new Form();
f.Region = new Region(path);
f.ShowDialog();
09/04/2015
Računarski praktikum 3
87
CreateGraphics
public class Form1 : Form
{
Button button1 = new Button();
public Form1()
{
InitializeComponent();
button1.Text = "Nacrtaj";
button1.Location = new Point(20, 170);
Controls.Add(button1);
button1.Click += Nacrtaj;
}
09/04/2015
Računarski praktikum 3
88
CreateGraphics
void Nacrtaj(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
GraphicsPath path = new GraphicsPath();
Pen pen = new Pen(Color.FromArgb(200, 100, 100, 200), 15);
path.StartFigure();
path.AddLine(new Point(20, 20), new Point(100, 20));
path.AddLine(new Point(100, 20), new Point(100, 150));
path.AddLine(new Point(100, 150), new Point(20, 150));
path.AddLine(new Point(20, 150), new Point(20, 20));
path.AddLine(new Point(20, 20), new Point(20, 40));
pen.LineJoin = LineJoin.Round;
g.DrawPath(pen, path);
}
09/04/2015
Računarski praktikum 3
89
MDI
MDI (Multiple Document Interfaces) aplikacije omogućavaju
prikaz više dokumenata u isto vrijeme, svaki u svom
prozoru. Takve aplikacije obično imaju Window izbornik za
mijenjanje dokumenata ili prozora.
Postoje dvije osnovne vrste prozora (tool window i document
window).
Dokumentni prozori se stvaraju dinamički (npr. kad se
otvaraju ili kreiraju datoteke). Popis otvorenih prozora se u
pravilu nalazi u Window izborniku u trenutnom z-poretku.
09/04/2015
Računarski praktikum 3
90
MDI
09/04/2015
Računarski praktikum 3
91
MDI
09/04/2015
Računarski praktikum 3
92
MDI
public class ChildForm : Form
{
public ChildForm()
{
this.Text = "ChildForm";
}
}
public class Form1 : Form
{
private MenuStrip menuStrip1;
private ToolStripMenuItem fileToolStripMenuItem;
private ToolStripSeparator toolStripSeparator1;
private ToolStripMenuItem exitToolStripMenuItem;
private ToolStripMenuItem newToolStripMenuItem;
09/04/2015
Računarski praktikum 3
93
MDI
public Form1()
{
this.menuStrip1 = new MenuStrip();
this.fileToolStripMenuItem = new ToolStripMenuItem();
this.toolStripSeparator1 = new ToolStripSeparator();
this.newToolStripMenuItem = new ToolStripMenuItem();
this.exitToolStripMenuItem = new ToolStripMenuItem();
this.menuStrip1.Items.Add( this.fileToolStripMenuItem);
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Size = new System.Drawing.Size(576, 24);
this.fileToolStripMenuItem.DropDownItems.AddRange(
new System.Windows.Forms.ToolStripItem[] {
this.newToolStripMenuItem, this.toolStripSeparator1, this.exitToolStripMenuItem});
09/04/2015
Računarski praktikum 3
94
MDI
this.fileToolStripMenuItem.Text = "&File";
this.newToolStripMenuItem.Text = "&New";
this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click);
this.exitToolStripMenuItem.Text = "E&xit";
this.ClientSize = new System.Drawing.Size(576, 438);
this.Controls.Add(this.menuStrip1);
this.IsMdiContainer = true;
this.MainMenuStrip = this.menuStrip1;
this.Text = "Form1";
}
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
ChildForm child = new ChildForm();
child.MdiParent = this;
child.Show();
}
}
09/04/2015
Računarski praktikum 3
95
MDI
public class Program
{
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
09/04/2015
Računarski praktikum 3
96