Panel vom UserControl im Deisgner geblockt

Ich möchte ein Fenster-Control in Sprechblasform als UserControl erstellen.
Dazu habe ich die Klasse Form abgeleitet, Transparenz gesetzt, Fensterrand entfernt und meine Sprechblase gezeichnet (OnPaint-Methode überschrieben).

Jetzt habe ich noch ein Panel hinzugefügt, wo man dann später die Controls in der Sprechblase platzieren soll (notwendig, weil sonst beim platzieren der Controls die Elemente nicht an den richtigen Rändern einrasten).

Wenn ich jetzt aber das UserControl nutzen möchte, dann ist das Panel geblockt. Ich kann im Panel keine Elemente platzieren, sondern nur drum herum.

Hier ein Screenshot:
http://img529.imageshack.us/f/panelproblem.png/

Quellcode:

public partial class BubbleForm : System.Windows.Forms.Form
 {
 public BubbleForm()
 {
 InitializeComponent();
 }

 protected override void OnShown(EventArgs e)
 {
 base.OnShown(e);

 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
 this.TransparencyKey = SystemColors.Control;
 }

 protected override void OnPaint(PaintEventArgs e)
 {
 base.OnPaint(e);

 Point p1 = new Point(10, 0);
 Point p2 = new Point(this.Width-1, 0);
 Point p3 = new Point(this.Width - 1, this.Height - 1);
 Point p4 = new Point(10, this.Height - 1);

 Point arrorHead = new Point(0, (int)((double)this.Height \* 0.30));
 Point aTopCorner = new Point(10, arrorHead.Y - 10);
 Point aBottomCorner = new Point(10, arrorHead.Y + 10);

 Point[] form = new Point[7];
 form[0] = p1;
 form[1] = p2;
 form[2] = p3;
 form[3] = p4;
 form[4] = aBottomCorner;
 form[5] = arrorHead;
 form[6] = aTopCorner;

 e.Graphics.FillPolygon(SystemBrushes.Info, form);
 e.Graphics.DrawPolygon(Pens.Red, form);
 }

 protected override void OnSizeChanged(EventArgs e)
 {
 base.OnSizeChanged(e);

 this.panel1.Location = new Point(11, 1);
 this.panel1.Size = new Size(this.Width - this.panel1.Location.X - 1, this.Height - this.panel1.Location.Y - 1);
 }
 }

Wie kann ich dieses Problem lösen?

Hallo!
Dem geposteten Code sieht man es zwar nicht an (der fragliche Bereich ist in der .Designer.cs-Datei enthalten), aber ich vermute mal stark, dass Du einfach das Panel „panel1“ (übrigens: Aussagekräftige Namen haben noch nie geschadet :smile: ) auf das Form gezogen und nicht weiter angepasst hast.
Standardmäßig ist die Sichtbarkeit von Controls im Form auf „private“. Damit Du (bzw. auch der Designer) Zugriff auf das Panel (und damit dessen Controls-Collection) hat, um Kindelemente darauf zu positionieren, musst Du die Sichtbarkeit des Panels auf mindestens „protected“ setzen.

Gruß,
Martin

Standardmäßig ist die Sichtbarkeit von Controls im Form auf
„private“. Damit Du (bzw. auch der Designer) Zugriff auf das
Panel (und damit dessen Controls-Collection) hat, um
Kindelemente darauf zu positionieren, musst Du die
Sichtbarkeit des Panels auf mindestens „protected“ setzen.

Stimmt daran könnte es liegen.

Ist denn das eine gute Idee am Designer-File rumzubasteln, da die doch automatisch erstellt wird (hatte damit schon schlechte Erfahrungen gemacht)?

Ich habe es jetzt anders gelöst. Ich habe das Panel weggelassen und statt dessen das Padding vom Hauptfenster einfach angepasst.

Aber gibt es nicht generell sowas wie Platzhalter für UserControls, wo der Nutzer dann darin Elemente platzieren kann?
Bei asp.net gibt es ja sowas, aber für Windows-Forms ist mir leider nichts bekannt.

(übrigens: Aussagekräftige Namen haben noch nie geschadet :smile: )

Naja. Wenn ich nur statische Elemente habe, die nur zur Dekoration da sind (Labels, Groupboxes) oder Panel, die ich in der Laufzeit nicht weiter editiere, dann lass ich den Namen einfach.
Auch wenn ich nur 1 Textbox habe, lass ich es manchmal bei textBox1 :smile:

Hallo nochmal!
Du brauchst gar nicht „von Hand“ im Designer-File rumbasteln. Markier’ im Designer Dein Panel und stell’ unter „Modifiers“ auf „Protected“.

Gruß,
Martin