internal virtual void ApplyChanges(int type, object value)
        {
            /*
             * Типы изменений:
             * 1 - позиция
             * 2 - размер
             * 3 - видимость
             * 4-inf - отдельно для каждого
             *
             */
            switch (type)
            {
            case 1:
                //позиция
                Location = (Point)value;
                break;

            case 2:
                //размер
                ChangeScale((float)value);
                break;

            case 3:
                //видимость
                Visible = (Boolean)value;
                break;
            }
            FillPropPanel(parentTabPage.GetPropertiesPanel());
        }
        public static void Init(Control origin, Control target, InnerTabPage _parent)
        {
            parent          = _parent;
            controlAligment = new ControlAligment(parent.GetDesktopPanel());
            moving          = false;
            scaling         = false;
            bottomEdge      = false;
            upperEdge       = false;
            leftEdge        = false;
            rightEdge       = false;
            cursorOrigin    = Point.Empty;

            origin.Click     += (sender, e) => { ((InnerControl)target).FillPropPanel(parent.GetPropertiesPanel()); };
            origin.MouseDown += Control_MouseDown; // Активировать изменение объекта
            origin.MouseUp   += Control_MouseUp;   // Прекратить изменение объекта
            origin.MouseDown += (sender, e) =>
            {
                startLocation = target.Location;
            };
            origin.MouseUp += (sender, e) =>
            {
                if (((Control)sender).Location != startLocation)
                {
                    parent.SaveUndoAction(new ActionStack((InnerControl)target, 1, startLocation));
                }
            };
            origin.MouseMove += (sender, e) => MoveControl(target, e); // Само изменение рассчитывается здесь
        }