Sve kritike (pozitivne ili one pljuvatorske) su dobrodošle.. Pa da počnem:
Imamo sledeći zadatak:
Napraviti dve forme: Form1 i Form2. Dok je Form1 aktivna, pritiskom tastera Ctrl + K otvara se Form2. Form2 sadrži 3 track bar-a. Njihova vrednost može biti od 0 do 255 i svaki od njih predstavlja jednu od 3 RGB komponente. Promenom vrednosti track barova, menja se BackGround color forme Form1. Korisnik može otvoriti proizvoljan broj formi Form2, ali svaka forma mora imati povratnu informaciju kada je došlo do promene BackGround color forme Form1 kako bi vrednosti track barova u tim formama bile ažurirane.
To bi trebalo da izgleda kao na slici ispod.

Novom projektu dodajte 2 forme: Form1 i Form2.
U Form2 potrebno je uraditi sledeće:
Dodati 3 track bar-a.
Za maximum staviti 255, a za TickFrequency 20.
Selektovati sva 3 track bara i u event prozoru napraviti zajednički Scroll event pod nazivom Skrolovanje.

Postaviću ceo kod za Form1 i Form2 pa ću objašnjavati deo po deo.
Form1
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace boranija
{
public delegate void ColorDelegate(Color c);
public partial class Form1 : Form
{
public event ColorDelegate PromenilaSeBoja;
public Form1()
{
InitializeComponent();
KeyPreview = true;
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control == true && e.KeyCode == Keys.K)
{
Form2 f = new Form2();
f.SetBoja(BackColor);
f.SkrolovaoSeTrackBar += new ColorDelegate(PromeniBoju);
PromenilaSeBoja += new ColorDelegate(f.SetBoja);
f.Show();
}
}
void PromeniBoju(Color c)
{
BackColor = c;
}
private void Form1_BackColorChanged(object sender, EventArgs e)
{
if (PromenilaSeBoja != null)
PromenilaSeBoja(BackColor);
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace boranija
{
public delegate void ColorDelegate(Color c);
public partial class Form1 : Form
{
public event ColorDelegate PromenilaSeBoja;
public Form1()
{
InitializeComponent();
KeyPreview = true;
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control == true && e.KeyCode == Keys.K)
{
Form2 f = new Form2();
f.SetBoja(BackColor);
f.SkrolovaoSeTrackBar += new ColorDelegate(PromeniBoju);
PromenilaSeBoja += new ColorDelegate(f.SetBoja);
f.Show();
}
}
void PromeniBoju(Color c)
{
BackColor = c;
}
private void Form1_BackColorChanged(object sender, EventArgs e)
{
if (PromenilaSeBoja != null)
PromenilaSeBoja(BackColor);
}
}
}
Form2
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace boranija
{
public partial class Form2 : Form
{
public event ColorDelegate SkrolovaoSeTrackBar;
public Form2()
{
InitializeComponent();
}
public void SetBoja(Color c)
{
trackBar1.Value = c.R;
trackBar2.Value = c.G;
trackBar3.Value = c.B;
}
private void Skrolovanje(object sender, EventArgs e)
{
if (SkrolovaoSeTrackBar != null)
SkrolovaoSeTrackBar(Color.FromArgb(trackBar1.Value, trackBar2.Value, trackBar3.Value));
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace boranija
{
public partial class Form2 : Form
{
public event ColorDelegate SkrolovaoSeTrackBar;
public Form2()
{
InitializeComponent();
}
public void SetBoja(Color c)
{
trackBar1.Value = c.R;
trackBar2.Value = c.G;
trackBar3.Value = c.B;
}
private void Skrolovanje(object sender, EventArgs e)
{
if (SkrolovaoSeTrackBar != null)
SkrolovaoSeTrackBar(Color.FromArgb(trackBar1.Value, trackBar2.Value, trackBar3.Value));
}
}
}
U konstruktoru forme Form1 stoji
Code:
KeyPreview = true;
KeyPreview = true;
Time smo rekli da će svi key događaji prvo biti prosleđeni formi umesto kontroli koja ima fokus.
U KeyDown događaju otvaramo formu Form2 ako je pritusnuta kombinacija tastera Ctrl + K:
Code:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control == true && e.KeyCode == Keys.K)
{
Form2 f = new Form2();
...
f.Show();
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control == true && e.KeyCode == Keys.K)
{
Form2 f = new Form2();
...
f.Show();
}
}
Pravimo fju za promenu boje pozadine:
Code:
void PromeniBoju(Color c)
{
BackColor = c;
}
void PromeniBoju(Color c)
{
BackColor = c;
}
Negde u okviru namespace-a, a izvan klase Form1, deklarišemo sledeći delegat:
Code:
public delegate void ColorDelegate(Color c);
public delegate void ColorDelegate(Color c);
On je zajednički za sve klase iz tog namespace-a.
U klasi Form1 potrebno je deklarisati sledeći događaj koji će se pozivati svaki put kada se promeni BackColor forme Form1:
Code:
public event ColorDelegate PromenilaSeBoja;
public event ColorDelegate PromenilaSeBoja;
Za sada nećemo registrovati taj događaj, ali ćemo ga pozvati u BackColorChanged događaju:
Code:
private void Form1_BackColorChanged(object sender, EventArgs e)
{
if (PromenilaSeBoja != null)
PromenilaSeBoja(BackColor);
}
private void Form1_BackColorChanged(object sender, EventArgs e)
{
if (PromenilaSeBoja != null)
PromenilaSeBoja(BackColor);
}
U formi Form2 potrebno je napraviti f-ju koja će postaviti vrednosti track bar-ova u zavisnosti boje.
Code:
public void SetBoja(Color c)
{
trackBar1.Value = c.R;
trackBar2.Value = c.G;
trackBar3.Value = c.B;
}
public void SetBoja(Color c)
{
trackBar1.Value = c.R;
trackBar2.Value = c.G;
trackBar3.Value = c.B;
}
Deklarišemo događaj koji će se desiti kada se skroluje neki track bar
Code:
public event ColorDelegate SkrolovaoSeTrackBar;
public event ColorDelegate SkrolovaoSeTrackBar;
Taj događaj još uvek ne registrujemo ali ga pozivamo u događaju Skrolovanje koji je zajednički Scroll događaj za sva 3 track bar-a
Code:
private void Skrolovanje(object sender, EventArgs e)
{
if (SkrolovaoSeTrackBar != null)
SkrolovaoSeTrackBar(Color.FromArgb(trackBar1.Value, trackBar2.Value, trackBar3.Value));
}
private void Skrolovanje(object sender, EventArgs e)
{
if (SkrolovaoSeTrackBar != null)
SkrolovaoSeTrackBar(Color.FromArgb(trackBar1.Value, trackBar2.Value, trackBar3.Value));
}
Na kraju ostalo je još da registrujemo sve neregistrovane događaje.
Vratimo se na KeyDown događaj forme Form1.
Pravimo referencu f na formu Form2
Code:
Form2 f = new Form2();
Form2 f = new Form2();
Podešavamo vrednosti track bar-ova
Code:
f.SetBoja(BackColor);
f.SetBoja(BackColor);
Registrujemo događaj forme Form2 tako da svaki put kad se izvrši skrolovanje, pozove se funkcija PromeniBoju koja menja boju pozadine u zavisnosti vrednosti track bar-ova
Code:
f.SkrolovaoSeTrackBar += new ColorDelegate(PromeniBoju);
f.SkrolovaoSeTrackBar += new ColorDelegate(PromeniBoju);
Registrujemo događaj PromenilaSeBoja forme Form1 koji će pozvati f-ju SetBoja forme Form2 koja će promeniti vrednosti track bar-ova svaki put kada se promeni boja pozadine forme Form1
Code:
PromenilaSeBoja += new ColorDelegate(f.SetBoja);
PromenilaSeBoja += new ColorDelegate(f.SetBoja);
I na kraju prikazujemo formu Form2
Code:
f.Show();
f.Show();
Zahvaljujem se svima koji su izdržali i pročitali ovaj tutorial do kraja!
U prilogu šaljem izvršnu verziju programa gde možete videti kako to sve treba da radi.
Prilikom pisanja ovog tutorijala nije povređena ni jedna životinja!
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D