title: Controls from abstract base-Form not shown when inherited by a child Form
body: <p>I am following the solution provided by Juan Carlos Diaz <a href="https://stackoverflow.com/questions/1620847/how-can-i-get-visual-studio-2008-windows-forms-designer-to-render-a-form-that-im">here</a></p>
  
  <p>My problem is that I do not see any of the abstract class's form controls displayed in the concrete class. I am expecting them to be there so that I may use the design editor with the concrete class.</p>
  
  <p>Here are the steps that I took:</p>
  
  <ol>
  <li>create a new solution</li>
  <li>create a new winforms project (.Net 4.5.2)</li>
  <li>create a Form titled <code>AbstractBaseForm.cs</code>, and add some hello world logic:</li>
  </ol>
  
  <p><img src="https://i.stack.imgur.com/imL9A.png" alt="enter image description here"></p>
  
  <ol start="4">
  <li><p>add <code>abstract</code> keyword to <code>AbstractBaseForm.cs</code>; your code should look something like this:</p>
  
  <pre><code>public abstract partial class AbstractBaseForm : Form
  {
      protected AbstractBaseForm()
      {
          InitializeComponent();
      }
  
      private void button1_Click(object sender, EventArgs e)
      {
          label1.Text = "Hello World";
      }
  }
  </code></pre></li>
  <li><p>Add the following class to your project:</p>
  
  <pre><code>public class AbstractControlDescriptionProvider&lt;TAbstract, TBase&gt; : TypeDescriptionProvider
  {
      public AbstractControlDescriptionProvider()
          : base(TypeDescriptor.GetProvider(typeof (TAbstract)))
      {
      }
  
      public override Type GetReflectionType(Type objectType, object instance)
      {
          if (objectType == typeof (TAbstract))
              return typeof (TBase);
  
          return base.GetReflectionType(objectType, instance);
      }
  
      public override object CreateInstance(IServiceProvider provider, Type objectType, Type[] argTypes, object[] args)
      {
          if (objectType == typeof (TAbstract))
              objectType = typeof (TBase);
  
          return base.CreateInstance(provider, objectType, argTypes, args);
      }
  }
  </code></pre></li>
  <li><p>Add the following attribute to <code>AbstractBaseForm.cs</code>:</p>
  
  <pre><code>[TypeDescriptionProvider(typeof (AbstractControlDescriptionProvider&lt;AbstractBaseForm, Form&gt;))]
  public abstract partial class AbstractBaseForm : Form
  {
  </code></pre></li>
  <li><p>Add a second Form to the project, titled <code>ConcreteForm.cs</code> and have it inherit from <code>AbstractBaseForm.cs</code>, like this:</p>
  
  <pre><code>public partial class ConcreteForm : AbstractBaseForm
  {
      public ConcreteForm()
      {
           InitializeComponent();
      }
  }
  </code></pre></li>
  <li><p>Change program.cs so that it loads <code>ConcreteForm.cs</code> like this:</p>
  
  <pre><code>Application.Run(new ConcreteForm());
  </code></pre></li>
  <li><p>Execute the project. You should see <code>ConcreteForm.cs</code> load, and clicking the button changes the label to say "Hello World". </p></li>
  <li><p>Close the application, and click on <code>ConcreteForm.cs</code>, bringing up its design view. You will see this:</p></li>
  </ol>
  
  <p><img src="https://i.stack.imgur.com/f4x6s.png" alt="enter image description here"></p>
  
  <p>Why do I not see the inherited controls from <code>AbstractBaseForm.cs</code> in the design view?</p>