Funcionalitu zabezpečuje fřída Designer, která zabezpečuje následující funkce:
Označení prvků na formuláři po kliknutí na prvek
Změnu pozice ovládacího prvku
Změnu velikosti ovládacího prvku
Je možné označit jeden prvek na formuláři kliknutím
Je možné označit více prvků na fomuláři kliknutím na formulář. Táhnutí myši je možné specifikovat prostor ve kterém budou všechny ovládací prvky označené.
Prvky, které podporují změnu pozice musí implemetovat interface IDesignControl
public interface IDesignControl
{
bool IsSelected { get; set; }
RectTracker RectTracker { get; set; }
int OriginalLeft { get; set; }
int OriginalTop { get; set; }
int OriginalWidth { get; set; }
int OriginalHeight { get; set; } }
Tlačítko, které podporuje změnu pozice / velikosti implementuje IDesignControl interface
public class MyButton : System.Windows.Forms.Button, IDesignControl
{
public bool IsSelected { get; set; }
public RectTracker RectTracker { get; set; }
public int OriginalLeft { get; set; }
public int OriginalTop { get; set; }
public int OriginalWidth { get; set; }
public int OriginalHeight { get; set; } }
Na formuláři, který bude implementovat změnu je nutné vytvořit instanci třídy Designer.
des = new Designer(panel1);
Contructor parameter panel1 is control which will be designer area.
public partial class Form1 : Form
{
Designer des = null;
public Form1()
{
InitializeComponent();
des = new Designer(panel1);
}
}
Je možné povolit / zakázat změnu pozice prvků nastavením proměnné DesignerMode.
des.DesignerMode = true;
Pokud označujete více prvků najednou pomocí myši, je třeba vyhodnotit, které prvky spadají do označené oblasti.
Toto zabezpečuje funkce region.IsVisible.
Region region = new Region(mp_Rect);
foreach (Control ctrl in DesignerForm.Controls)
{
if (region.IsVisible(ctrl.Left, ctrl.Top) == true)
{
iDes.IsSelected = true;
iDes.RectTracker = new RectTracker(ctrl);
}
}
Třída RectTracker zobrazuje čtverec okolo označených prvků.