C# – How to access inherited controls in the winforms designer

cvisual-studio-2008winforms

I'm making some controls which all have to share the same look and some common behavior, although they are meant for different kind of inputs. So I made a BaseClass which inherit from UserControl, and all my controls inherit from BaseClass.

However, if i add controls for BaseClass in the designer, such as a TableLayoutPanel, i can't access them when I'm designing the inherited classes. I see the TableLayoutPanel, but even though he is "protected", i can't modify it or put controls in it through the designer. I've no trouble accesing it by code, but i don't want to lose the ability to use the designer.

Right now, i simply removed all controls from BaseClass, added the layout and all the common controls in each of the inherited class, then use references to manipulate them inside BaseClass. But that doesn't satisfy me at all. Is there a way to make the designer work with inherited protected member controls ?

Environment : C#, .NET 3.5, Visual Studio 2008

EDIT to answer SLaks's suggestion. I tried setting a property, and although I'm not used to use them it doesn't seem to work. Here is the code i tried :

    public partial class UserControl1 : UserControl
    {
            public UserControl1()
            {
                    InitializeComponent();
            }

            public TableLayoutPanel TableLayoutPanel1
            {
                    get { return tableLayoutPanel1;}
                    set { tableLayoutPanel1 = value;}
            }
    }

    public partial class UserControl2 : UserControl1
    {
            public UserControl2()
            {
                    InitializeComponent();
            }
    }

Best Answer

When you try to access from the inherited control with the designer to the TableLayoutPanel declared in the base control, you're using a feature in WinForms called "Visual Inheritance".

Unfortunately TableLayoutPanel doesn't support visual inheritance: http://msdn.microsoft.com/en-us/library/ms171689%28VS.80%29.aspx

That's why the TableLayoutPanel appears blocked in the inherited controls.

Related Topic