Click here to Skip to main content
11,933,213 members (63,218 online)
Click here to Skip to main content
Add your own
alternative version


3 bookmarked

DesignTime adding of Controls to a UserForm on a WinForm

, 15 Jul 2011 CPOL
Rate this:
Please Sign up or sign in to vote.
An interesting change in behavior in VS 2010 Pro ?
Note 1: The result reported here is a hypothesis based on testing in Visual Studio Pro 2010, with the WinForms project set to compile against .NET FrameWork 4 Client Profile, only.

Note 2: This tip does not consider using Component Classes which are sub-classed as Containers. Only UserControl is discussed here.

Note 3: I appreciate all feedback, and correction, on the content of this Tip: hypothesis refutation welcome.


0. Consider the action of drag-dropping a Control from the ToolBox onto a Panel, or GroupBox, on a Form at DesignTime: you will get visual feedback from the drop target, and the dropped Control will become a child of the Panel or GroupBox.

However, if you create a UserForm in a WinForms .NET solution, and then build the project, and then drag-drop an instance of the UserControl on a Form from the ToolBox: it will not 'accept' ('swallow' may be a better term)other Controls: in other words, the drag-dropped Controls will not become 'child' controls of the UserControl: rather, they will become 'child' Controls of the Form. And you do not have any visual feedback as you do when you drag-drop to a Panel, or other Container Control.
  1. An early Microsoft tech-note(1)[^] showed how to make a UserControl at DesignTime in a Windows Form 'accept' Controls drag-dropped from the ToolBox. This was accomplished by using the IDesigner attribute.
  2. In 2009, Henry Minute published a CodeProject article(2)[^] addressing the problem that a UserControl placed on a Windows Form at DesignTime inside another UserForm (i.e., nested) could not have new controls drag-dropped to it from the Visual Studio Toolbox, and have the UserControl 'accept' these dragged Controls as 'child' controls of the UserForm: these dragged Controls would remain 'child' controls of the Parent Form.

Something appears to have changed in VS 2010

0. adorning a UserControl with the IDesigner Attribute like this:
// you must have a reference set to System.ComponentModel.Design;
using System.ComponentModel.Design
namespace yourForm_NameSpace
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
    public partial class yourUserControl: UserControl
      // your UserControl code
  1. As expected (based on the Microsoft tech-note cited: (1)): you now will find that you can drag-drop other Controls onto the top-level UserForm at DesignTime, and get DesignTime feedback.

  2. What is not expected: you can nest instances of this UserControl inside other instances of this UserControl, and you will still be able to drag-drop new Controls from the ToolBox onto the nested UserControls, and get Design-Time feedback, as if you were drag-dropping.

  3. What is also not expected: you can drag-drop a Control onto the Form surface, and then move it inside a top-level or nested UserControl adorned with the IDesigner Attribute, and it will be automatically 're-Parented:' however, you will not get the Design-Time drag-feedback you do when you drag-drop from the 'ToolBox.


VS 2010 Pro, Windows Forms, now makes it easier to deal with DesignTime support ... via drag-drop of Controls from the ToolBox ... of nested UserControls without going to the lengths that Henry Minute went to in 2009 ... of implementing some complex DesignerProvider code ... in his excellent CodeProject article cited here(2).


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Chief Technology Officer
Thailand Thailand
Human being, mortal, flawed.

You may also be interested in...

Comments and Discussions

GeneralRe: Thanks, Henry, I'll download your code, and examine it tonig... Pin
BillWoodruff17-Jul-11 18:09
memberBillWoodruff17-Jul-11 18:09 
GeneralRe: Bill, I have created a small app (using VS2008) to demonstr... Pin
Henry Minute17-Jul-11 10:30
memberHenry Minute17-Jul-11 10:30 
GeneralRe: Thanks, Henry. I would appreciate your commenting on my obse... Pin
BillWoodruff17-Jul-11 5:23
memberBillWoodruff17-Jul-11 5:23 
GeneralHi, Johann, Your question is a very good one, and one I also... Pin
BillWoodruff15-Jul-11 15:05
memberBillWoodruff15-Jul-11 15:05 
GeneralHmm, I'm not really into this subject, but when I once creat... Pin
johannesnestler14-Jul-11 23:59
memberjohannesnestler14-Jul-11 23:59 
GeneralRe: Hi Johannes, I've posted a message to Henry Minute, in the f... Pin
BillWoodruff16-Jul-11 15:36
memberBillWoodruff16-Jul-11 15:36 
GeneralRe: You are quite correct. You can base your own controls on Con... Pin
Henry Minute17-Jul-11 2:09
memberHenry Minute17-Jul-11 2:09 
You are quite correct. You can base your own controls on ContainerControl and get design-time 'nesting' functionality when it is added to a form. However, there are two possible problems with this.
1) You cannot design your control visually, you can only set, for example, a BorderStyle or Text by writing code.
2) OK but UserControl is a descendent of ContainerControl and it has BorderStyle and I've just realized that Text was a bad example Smile | :) . UserControl has a BorderStyle anyway and it can be designed visually but when you add your new UserControl based Control to a form, it no longer acts as a container.
So it's horses for courses. If your control is only for your own use and you are comfortable with the lack of visual design and you don't need the additional properties then that's fine, descend from ContainerControl.

Hope this helps. Smile | :)

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.151126.1 | Last Updated 15 Jul 2011
Article Copyright 2011 by BillWoodruff
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid