DockEditor
abgedichtet ist, aber Sie können Ihre benutzerdefinierte Dock-Editor basiert auf DockEditor
ohne erben es. In Ihrer benutzerdefinierten UITypeEditor
können Sie eine Instanz von DockEditor
erstellen und mithilfe von Reflection das Editorsteuerelement bearbeiten und dann die Wertbearbeitung mit diesem Steuerelement ausführen.
Die DockEditor
verwendet eine DockUI
Steuerung, die eine private Klasse ist. Es hat ein Kontrollkästchen für None
Schaltfläche und Container-Steuerelement, die Kontrollkästchen für , Top
, Left
, Right
und Bottom
enthält. Dann können Sie einfach Enabled
, BackColor
oder andere Eigenschaften basierend auf Ihrer Logik ändern.
Im folgenden Code werde ich diese Kontrollkästchen Schaltflächen finden und ich werde Fill
, Top
, Bottom
und None
deaktivieren. Die einzigen verfügbaren Optionen für den Benutzer wird Left
und Right
sein:
public class MyDockEditor : UITypeEditor
{
DockEditor editor;
public MyDockEditor()
{
editor = new System.Windows.Forms.Design.DockEditor();
}
public override object EditValue(ITypeDescriptorContext context,
IServiceProvider provider, object value)
{
Type dockUiType = typeof(DockEditor)
.GetNestedType("DockUI", BindingFlags.NonPublic);
var dockUiConstructor = dockUiType.GetConstructors()[0];
var dockUiField = typeof(DockEditor)
.GetField("dockUI", BindingFlags.Instance | BindingFlags.NonPublic);
var dockUiObject = dockUiConstructor.Invoke(new[] { editor }) as Control;
dockUiField.SetValue(editor, dockUiObject);
var container = dockUiObject.Controls[0];
var none = dockUiObject.Controls[1];
var fill= container.Controls[0];
var left= container.Controls[1];
var right= container.Controls[2];
var top = container.Controls[3];
var bottom = container.Controls[4];
none.Enabled = false;
fill.Enabled = false;
top.Enabled = false;
bottom.Enabled = false;
return editor.EditValue(context, provider, value);
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return editor.GetEditStyle(context);
}
}
es nutzen zu können, reicht es Dock
Eigentum Ihrer Kontrolle mit einem Editor Attribut zu schmücken:
[Editor(typeof(MyDockEditor), typeof(UITypeEditor))]
public override DockStyle Dock
{
get { return base.Dock; }
set { base.Dock = value; }
}
Wie Sie unten Bild sehen in , nur links und rechts aktiviert.