Created UserControl1.cs class UserControl1 : UserControl . I threw in controls ... :Control and components ... :Component . Created UserControl2.cs . Changed ancestor to class UserControl2 : UserControl1 in UserControl2.cs and UserControl2.Designer.cs . Opened UserControl2.cs in the constructor. The whole layout was inherited, but there is no access to change properties. Returned to the ancestor and put in its constructor all the "controls" and components the Modifiers property with the value Protected . “Controls” are not available for changing properties, and for components some properties are available. How to make, so that the "controls" have some properties available for change?

Update

As it turned out, it is important what kind of controls on my ancestor: DataGridView and ToolStrip

    2 answers 2

    Walkthrough. Demonstration of visual inheritance

    Not all controls support visual inheritance from the base form. The scenario described in this (Walkthrough: Visual Inheritance Demonstration - Note 3per) step-by-step guide does not support the following controls:

    • Webbrowser
    • Toolstrip
    • ToolStripPanel
    • TableLayoutPanel
    • FlowLayoutPanel
    • Datagridview

    These controls in the derived form are always read-only, regardless of the modifiers used (private, protected or public).

    ...

    Inheritance for user controls works in the same way.

    Alas. So sorry, this is exactly what I was going to inherit

      Free translation https://stackoverflow.com/questions/15089289/cannot-visually-change-datagridview-in-inherited-form

      Just inherit the control and specify the correct DesignerAttribute:

       [Designer(typeof(System.Windows.Forms.Design.ControlDesigner))] public class InheritedDataGridView : DataGridView { } 

      Now use the InheritedDataGridView wherever you would like to have an inherited DataGridView. Works great

      Similarly for WebBrowser, ToolStrip, ToolStripPanel, TableLayoutPanel, FlowLayoutPanel