private static void ExtractErrorProviders(Control control, ICollection<ErrorProvider> errorProviders)
{
//use reflection to get to "components" field
var containerControl = control.GetContainerControl();
if (containerControl != null)
{
FieldInfo componentField = containerControl.GetType()
.GetField( "components", BindingFlags.NonPublic | BindingFlags.Instance );
if (componentField != null)
{
//get the component collection from field
object components = componentField.GetValue(containerControl);
if (components != null)
{
//locate the ErrorProvider within the collection
var container = components as IContainer;
if (container != null)
{
foreach (ErrorProvider provider in container.Components.OfType<ErrorProvider>())
{
if (!errorProviders.Contains( provider ))
errorProviders.Add( provider );
}
}
}
}
}
}