private protected void SetCheckState(CheckStateType value, bool firechange)
        {
            if (checkstate != value)
            {
                checkstate = value;

                if (GroupRadioButton && Parent != null && checkstate == CheckStateType.Checked)
                {
                    foreach (GLCheckBoxBase c in Parent.ControlsZ.OfType <GLCheckBoxBase>())
                    {
                        if (c != this && c.GroupRadioButton == true && c.checkstate != CheckStateType.Unchecked) // if not us, in a group, and not unchecked
                        {
                            c.checkstate = CheckStateType.Unchecked;                                             // set directly
                            if (firechange)
                            {
                                c.OnCheckChanged();                         // fire change
                            }
                            c.Invalidate();
                        }
                    }
                }

                if (firechange)
                {
                    OnCheckChanged();   // fire change on us
                }
                Invalidate();
            }
        }
        private protected void DrawTick(Rectangle checkarea, Color c1, CheckStateType chk, Graphics gr)
        {
            gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            if (chk == CheckStateType.Checked)
            {
                Point pt1 = new Point(checkarea.X + 2, checkarea.Y + checkarea.Height / 2 - 1);
                Point pt2 = new Point(checkarea.X + checkarea.Width / 2 - 1, checkarea.Bottom - 2);
                Point pt3 = new Point(checkarea.X + checkarea.Width - 2, checkarea.Y);

                using (Pen pcheck = new Pen(c1, 2.0F))
                {
                    gr.DrawLine(pcheck, pt1, pt2);
                    gr.DrawLine(pcheck, pt2, pt3);
                }
            }
            else if (chk == CheckStateType.Indeterminate)
            {
                Size cb = new Size(checkarea.Width - 5, checkarea.Height - 5);
                if (cb.Width > 0 && cb.Height > 0)
                {
                    using (Brush br = new SolidBrush(c1))
                    {
                        gr.FillRectangle(br, new Rectangle(new Point(checkarea.X + 2, checkarea.Y + 2), cb));
                    }
                }
            }

            gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
        }