Table of Contents

Pohyblivé panely

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.

Samostatná třída Area reprezentující panel

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.

Pohyb panelu pomocí myši

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;
        }
    }
}

Položka v hlavním menu pro přidání panelu

        private void areaMenuItem_Click (object sender, EventArgs e)
        {
            Area a = new Area ();
            a.Parent = pictureBox;
        }

Kontextové menu nového panelu

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;
        }

Area.cs DrawForm.cs