Search code examples
c#winformsuser-controlswindows-forms-designer

Recommended way to manipulate User Control panels into a Windows From


I just started working with Visual Studio C# and to be honest I didn't fully understand what happens when we chose to hide a form or a user control.

My intuition tells me this hide/show method is kind of "inefficient" way to get an user through all the functions of my app.

So I am asking you guys if there is another workaround to "load" user control parts in a form.

Right now my main_menu form has all the user control objects placed on the form, but hidden, and I am using buttons to show them.

Is there a better way to achieve the same result? (I was thinking of a workaround like having an empty panel where I can load the User Control - not sure if possible)

Thank you!


Solution

  • You can create the controls on the fly and add them to or remove them from the Controls collection. On the class level, define this field

    private Control _currentPanel;
    

    You can use a more specific type here, if you are deriving all your panels from a common base type.

    Then change the panel with

    // Remove previous one.
    if (_currentPanel != null) {
        Controls.Remove(_currentPanel);
    }
    
    // Add new one
    _currentPanel = new MyNewPanel();
     //TODO: possibly set the panels Docking property to Fill here.
    Controls.Add(_currentPanel);
    

    In the example I am working with the form's Controls collection; however, you might have to use the Controls collection of some container control holding the panel.