Encontrar componentes en un formulario de Windows c # (no controles)

Sé cómo encontrar y recopilar una lista de todos los controles utilizados en un formulario de Windows. Algo como esto:

static public void FillControls(Control control, List<Control> AllControls)
{
    String controlName = "";
    controlName = control.Name;

    foreach (Control c in control.Controls)
    {
        controlName = c.Name;
        if ((control.Controls.Count > 0))
        {
            AllControls.Add(c);
            FillControls(c, AllControls);
        }
    }
}

Sin embargo, esta función no recupera los componentes no visuales en la parte inferior del formulario como HelpProvider, ImageList, TableAdapters, DataSets, etc.

¿Hay alguna forma de obtener la lista de estos componentes también?

Editar:

Gracias a @HighCore por indicarme que use System.ComponentModel.Component en lugar de una función similar, me proporciona una lista con componentes como ImageList, el proveedor de ayuda y BindingSource. Sin embargo, todavía echo de menos de esta lista los TableAdapters y los DataSets. Supongo que porque los heredan directamente de Object.

Por favor. No me refiera a publicaciones anteriores que muestren una función similar a la mía y que solo obtenga la lista de los controles.

Editar: ¿Por qué los votos negativos? ¡Esta pregunta nunca ha sido contestada antes!

Respuestas a la pregunta(1)

Su respuesta a la pregunta