Do okna nad nakreslený obrázek umístíme pohyblivé panely.
Pohyblivé panely vytvoříme jako “User Control” - prvky, které můžene přidávat do jiných oken.
V Solution Exploreru pravým tlačítkem myši vyberem Add a potom User Control.
Soubor pojmenujeme Area.cs.
V “design režimu” Area vypadaá jako šedivý obdélnik.
Jen jsem trochu upravil jeho velikost a změnil barvu na světle žlutou.
Do zdrojového textu doplníme kód podobný jako bylo kreslení čar v minulém příkladu.
using System; using System.Drawing; using System.Windows.Forms; namespace Draw { public partial class Area : UserControl { public Area () { InitializeComponent (); } private int X0, Y0; private bool press = false; private void Area_MouseDown (object sender, MouseEventArgs e) { X0 = e.X; Y0 = e.Y; press = true; } private void Area_MouseMove (object sender, MouseEventArgs e) { if (press) { if (e.Button == MouseButtons.Left) { Left += e.X - X0; Top += e.Y - Y0; } else if (e.Button == MouseButtons.Middle) { Width += e.X - X0; Height += e.Y - Y0; X0 = e.X; Y0 = e.Y; } } } private void Area_MouseUp (object sender, MouseEventArgs e) { press = false; } } }
private void areaMenuItem_Click (object sender, EventArgs e) { Area a = new Area (); a.Parent = pictureBox; }
Na položku Color připojíme funci měnící barvu panelu
private void colorMenuItem_Click (object sender, EventArgs e) { colorDialog.Color = this.BackColor; if (colorDialog.ShowDialog () == DialogResult.OK) BackColor = colorDialog.Color; }
Image v kontextovém menu se pomocí dialogového boxu zeptá na jméno souboru.
Konstruktor třídy Bitmap s textovým parametrem načte soubor se zadaným jménem
private void imageMenuItem_Click (object sender, EventArgs e) { if (openDialog.ShowDialog () == DialogResult.OK) { BackgroundImage = new Bitmap (openDialog.FileName); } }
Border zobrazí okraj kolem panelu.
Pokud bude vlastnost Checked nastavená na true, objeví se před položkou menu “zaškrtnutí”
private void borderMenuItem_Click (object sender, EventArgs e) { borderMenuItem.Checked = ! borderMenuItem.Checked; if (borderMenuItem.Checked) BorderStyle = BorderStyle.FixedSingle; else BorderStyle = BorderStyle.None; }
Pokud z většího obrázku vidíme jen roh, můžeme obrázek zmenšit a přizpůsobit velikosti našeho panelu
private void stretchMenuItem_Click (object sender, EventArgs e) { stretchMenuItem.Checked = ! stretchMenuItem.Checked; if (stretchMenuItem.Checked) BackgroundImageLayout = ImageLayout.Stretch; else BackgroundImageLayout = ImageLayout.None; }