Hi!
Hier ein UserControl "MyGroupControl", dem man im Designer Controls zufügen kann, und die landen dann im dafür vorgesehenen Bereich.
Das DesignerVerhalten steuert man, indem man einen geeigneten Designer hinzuattributiert.
In diesem Fall ist für MyGroupControl
ein eigener Designer geschrieben, und für das ContentPanel
der bereits bestehende ParentControlDesigner
gewählt, da nur minimale Möglichkeiten freigeschaltet werden sollen.
using System.ComponentModel;
using System.Windows.Forms;
namespace ContainerUcl {
/// <summary>
/// ein UserControl mit einem ContentPanel, auf das man Controls ablegen kann
/// </summary>
[Designer(typeof(MyGroupControlDesigner))]
public partial class MyGroupControl : UserControl {
public MyGroupControl() { InitializeComponent(); }
[DesignerSerializationVisibility( DesignerSerializationVisibility.Content )]
public ContentPanel ContentPanel {
get { return contentPanel; }
}
}
}
using System.Windows.Forms;
using System.ComponentModel;
using System.Security.Permissions;
namespace ContainerUcl {
/// <summary>
/// Designerklasse für das UserControl MyGroupControl, die den DesignMode fürdas ContentPanel freischaltet
/// </summary>
[PermissionSet( SecurityAction.Demand, Name = "FullTrust" )]
public class MyGroupControlDesigner : System.Windows.Forms.Design.ControlDesigner {
private MyGroupControl m_myGroupControl = null;
public override void Initialize( IComponent a_component ) {
base.Initialize( a_component );
m_myGroupControl = (( MyGroupControl )a_component);
EnableDesignMode(m_myGroupControl.ContentPanel, "ContentPanel");
}
//es sind viele weitere Overrides möglich, um das Designer-Verhalten des designeten Controls anzpassen
}
}
Um den ParentControlDesigner
ans ContentPanel
attributieren zu können, muß ein eigenes Control geschrieben werden, auch hier ist die einfachste Version gewählt:
using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design;
namespace ContainerUcl {
// das ParentControlDesigner-Attribut ermöglicht, im Designer hier was drauf zu droppen
[Designer(typeof(ParentControlDesigner))]
[System.ComponentModel.DesignerCategory("Code")]
public class ContentPanel : Control { }
}
Siehe auch
[Lösung] UserControl mit panel designer-fähig erstellen
How to make a UserControl object acts as a control container design-time by using Visual C#
Der frühe Apfel fängt den Wurm.