/// <summary>
        /// Attach control as child of control
        /// </summary>
        /// <param name="child">Child control</param>
        /// <param name="atback">False, at front of Z order, True, at back</param>
        public virtual void Add(GLBaseControl child, bool atback = false)
        {
            System.Diagnostics.Debug.Assert(!childrenz.Contains(child)); // no repeats
            child.parent             = this;
            child.suspendLayoutCount = 0;                                // we unsuspend - controls are created suspended

            child.ClearFlagsDown();                                      // in case of reuse, clear all temp flags as child is added

            if (atback)
            {
                childrenz.Add(child);
                childreniz.Insert(0, child);
            }
            else
            {
                int ipos = 0;
                if (!child.TopMost)                                           // add at end of top list.
                {
                    while (ipos < childrenz.Count && childrenz[ipos].TopMost) // find first place we can insert
                    {
                        ipos++;
                    }
                }

                childrenz.Insert(ipos, child);                     // in z order.  First is top of z.  insert puts it before existing
                childreniz.Insert(childreniz.Count - ipos, child); // in inv z order. Last is top of z.  if ipos=0, at end. if ipos=1, inserted just before end
            }

            CheckZOrder();      // verify its okay

            if (EnableThemer)
            {
                Themer?.Invoke(child);      // global themer
            }
            OnControlAdd(this, child);
            child.OnControlAdd(this, child);
            InvalidateLayout(child);        // we are invalidated and layout due to this child
        }