Here's a simple example for creating key/value pair editors:
Form form = new Form();
form.Location = new Point(x, y);
form.Width = 200;
form.SuspendLayout();
int usedHeight = 0;
foreach(KeyValuePair<string,> kvp in someDictionary){
Label label = new Label();
label.Text = kvp.Key;
label.Top = usedHeight + 7; label.Left = 5;
form.Controls.Add(label);
TextBox textBox = new TextBox();
textBox.Text = kvp.Value;
textBox.Top = usedHeight + 5; textBox.Left = 80;
textBox.Width = 115;
textBox.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
form.Controls.Add(textBox);
usedHeight += textBox.Height + 5;
}
form.ResumeLayout();
form.Height = usedHeight + 10;
What you might want to do is dynamically fill a panel, and have other panels around the edges of your form with their Dock property set. That way you can use the designer to make an OK/Cancel button bar, menus, toolbar etc, and just have a panel in the middle with dynamic content (and set the size of the form appropriately). Dynamically creating entire forms is probably less useful.
I used something similar to this to bring up a selection dialog where the number of options to check wasn't known at design time (it was a list of data sets to operate on, which can be added by the user). In that case I had a GroupBox which was dynamically sized and several other controls in a panel docked to the top or the bottom made in the designer.