/// <summary>
        /// Initialize a new instance of the KryptonGroupBox class.
        /// </summary>
        public KryptonGroupBox()
        {
            // Set default values
            _captionStyle       = LabelStyle.GroupBoxCaption;
            _captionEdge        = VisualOrientation.Top;
            _captionOrientation = ButtonOrientation.Auto;
            _captionVisible     = true;

            // Create storage objects
            _captionValues              = new CaptionValues(NeedPaintDelegate);
            _captionValues.TextChanged += new EventHandler(OnValuesTextChanged);

            // Create the palette storage
            _stateCommon   = new PaletteGroupBoxRedirect(Redirector, NeedPaintDelegate);
            _stateDisabled = new PaletteGroupBox(_stateCommon, NeedPaintDelegate);
            _stateNormal   = new PaletteGroupBox(_stateCommon, NeedPaintDelegate);

            // Create the internal panel used for containing content
            _panel = new KryptonGroupPanel(this, _stateCommon, _stateDisabled, _stateNormal, new NeedPaintHandler(OnGroupPanelPaint));

            // Make sure the panel back style always mimics our back style
            _panel.PanelBackStyle = PaletteBackStyle.ControlGroupBox;

            _drawContent = new ViewDrawContent(_stateNormal.Content, _captionValues, VisualOrientation.Top);

            // Create view for the control border and background
            _drawDocker = new ViewDrawGroupBoxDocker(_stateNormal.Back, _stateNormal.Border);

            // Create the element that fills the remainder space and remembers fill rectange
            _layoutFill = new ViewLayoutFill(_panel);

            // Add caption into the docker with initial dock edges defined
            _drawDocker.Add(_drawContent, ViewDockStyle.Top);
            _drawDocker.Add(_layoutFill, ViewDockStyle.Fill);

            // Create the view manager instance
            ViewManager = new ViewManager(this, _drawDocker);

            // We want to default to shrinking and growing (base class defaults to GrowOnly)
            AutoSizeMode = AutoSizeMode.GrowAndShrink;

            // Create the delegate used when we need to ensure obscurer is removed
            _removeObscurer = new EventHandler(OnRemoveObscurer);

            // Need to prevent the AddInternal from causing a layout, otherwise the
            // layout will probably try to measure text which causes the handle for the
            // control to be created which means the handle is created at the wrong time
            // and so child controls are not added properly in the future! (for the TabControl
            // at the very least).
            _ignoreLayout = true;

            // Add panel to the controls collection
            ((KryptonReadOnlyControls)Controls).AddInternal(_panel);

            _ignoreLayout = false;
        }
 /// <summary>
 /// Initialize a new instance of the PaletteGroupBox class.
 /// </summary>
 /// <param name="inherit">Source for inheriting palette defaulted values.</param>
 /// <param name="needPaint">Delegate for notifying paint requests.</param>
 public PaletteGroupBox(PaletteGroupBoxRedirect inherit,
                        NeedPaintHandler needPaint)
     : base(inherit, needPaint)
 {
     _content = new PaletteContent(inherit.PaletteContent, needPaint);
 }