Adding this answer because I don't see it here already.
If, in the constructor for the custom control, you are doing things like getting data to populate the control with, that can cause the problem of the control not being displayed in the designer.
To test for the above, just comment out any code you have in the constructor for the control other than InitializeComponent() and then rebuild the solution and check whether the control is showing up in the designer.
If this fixes your problem then move the code that you commented out in the constructor of the control into the constructor of the form, adjusting scope of methods and sub-controls as necessary to make them accessible from the form.
I don't really know why the above solution works, but I think it has to do with the order in which the code executes. I think that trying to populate the control with content before the form has initialized itself is the problem.