I suggest you to use
TableLayoutPanel
container to design your form. This will allow you to do what you want to do.
You can set Visible property to True/False as required.
Currently, when you hide some controls from your form it will be blank space at that location. but when you use
TableLayoutPanel
and set row/columns autosized, it will be collapsed and fill the blank spaces between controls.
You can refer below links :
http://www.programcall.com/28/csnet/winform-tablelayout-panel.aspx[
^]
http://www.c-sharpcorner.com/uploadfile/mahesh/tablelayoutpanel-in-C-Sharp/[
^]