Drag und Drop Steuerelemente auf einem benutzerdefinierten Steuerelement ausgeblendet werden
Erstellte ich eine benutzerdefinierte UserControl, wo ich Unterstützung Drag-und-Drop von Steuerelementen zur Entwurfszeit. Meine Kontrollen fallen in mein user control richtig, aber Sie sind versteckt, einmal fiel auf das Benutzersteuerelement. Erhalten Sie mehr Kontrolle, um sichtbar zu werden, ich habe, um es auszuwählen, und klicken Sie auf die design-time-IDE-Taste "nach Vorne" zu sehen, die Steuerung Hinzugefügt. Wenn ich die Projektmappe neu erstellen, die Steuerelemente wieder ausgeblendet.
Ich reproduzierte das Problem mit den folgenden code. In der IDE habe ich eine einfache Benutzer-Steuerelement "MyControl", zu dem ich fügte hinzu, eine einzige Panel-Steuerelement angedockt zu "Füllen". Dieses user control "MyControl" sollte dann gelöscht werden, auf einem Windows-Systemsteuerung. Dann, drag-and-drop ein anderes Steuerelement, wie einem Label oder Buton-Steuerelement auf das Benutzersteuerelement, und es wird ausgeblendet.
Unten ist der code für das user control. Wie kann ich die Steuerelemente, die fallen in der Benutzer-Steuerelement zur Entwurfszeit gebracht werden, automatisch in den Vordergrund?
MyControl.Designer.cs:
namespace Test
{
partial class MyControl
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
//panel1
//
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(150, 150);
this.panel1.TabIndex = 0;
//
//MyControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.panel1);
this.Name = "MyControl";
this.ResumeLayout(false);
}
private System.Windows.Forms.Panel panel1;
}
}
MyControl.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.Design;
namespace Axiom.Controls
{
[Designer(typeof(ParentControlDesigner))]
public partial class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Panel ContentPanel
{
get
{
return this.panel1;
}
}
}
internal class MyControlDesigner : ControlDesigner
{
public override void Initialize(IComponent component)
{
base.Initialize(component);
MyControl control = component as MyControl;
EnableDesignMode(control.ContentPanel, "ContentPanel");
}
}
}
Update:
Fand ich eine andere Frage/Antwort zu diesem problem von Drag & Drop Steuerelemente zur Entwurfszeit auf ein container-Steuerelement in einem benutzerdefinierten Benutzer-Steuerung:
Folgte ich dem obigen Artikel und erfolgreich gezogen und toolbox-Steuerelemente auf einem container-Steuerelement in meine benutzerdefinierte Steuerelement zur Entwurfszeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist wirklich ziemlich einfach. Sie sagen, Sie habe ein UserControl erstellt, dann noch ein Panel-Steuerelement, um es angedockt ist, um füllen Sie das gesamte UserControl.
So, Wann immer Sie hinzufügen-Steuerelemente auf das Benutzersteuerelement zur design-Zeit, Sie sind nicht indem Sie Sie auf das Panel-Steuerelement, sondern das UserControl selber. Das bewirkt, dass Sie zugedeckt durch das Panel-Steuerelement füllt das gesamte UserControl.
Bringt Sie zu der Vorderseite ist eine temporäre Lösung, wie die Orte, die Sie oben das Panel-Steuerelement. Es gilt jedoch nicht, legen Sie Sie innen das Panel-Steuerelement, das ist, warum Sie wieder "verschwinden", wenn Sie das Projekt neu erstellen. Dass Sie nicht wirklich verschwinden, Sie werden nur ausgeblendet werden, indem Sie das Bedienfeld wieder, als die Standard-Z-Ordnung Anordnung hat Sie sich unter das Panel.
Es ist nicht klar, warum Sie benötigen, um das Panel-Steuerelement an alle. Wenn es füllt die gesamte UserControl, es scheint nicht, um zu dienen jedem Zweck. Ein UserControl ist bereits ein container-Steuerelement, so dass Sie nicht brauchen ein Panel. Versuchen Sie, es zu entfernen von Ihrem UserControl, und dann können Sie auch was andere Steuerelemente, die Sie wollen, zur design-Zeit ohne Sie wird verdeckt durch die angedockte Panel.
Wenn Sie absolut müssen Sie ein Panel-Steuerelement füllt Ihr UserControl, müssen Sie eine Zeile code, die automatisch fügt die Steuerung fiel auf den UserControl zur design-Zeit, um die Kontrollen Sammlung für die Panel Kontrolle.
INestedContainer
Klasse als service über die Website. Dokumentation hat weitere details. Aber im Allgemeinen, sollten Sie sich scheuen, schreiben von benutzerdefinierten Designer-wenn überhaupt-möglich. Das ist ein ziemlich schlecht dokumentiert Gebiet der Zauberei, schwer zu bekommen Recht.Haben Sie versucht, die Einstellung Ihres Nutzer-Kontrolle auf der Unterseite zur design-Zeit?