Der Windows Forms Designer hat für die meisten Steuerelemente eigene Designerklassen. Der Designer für eine ListView ist System.Windows.Forms.Design.ListViewDesigner, eine interne Klasse in der System.Design.dll Assembly. Diese Klasse gibt Ihnen die Möglichkeit, die Spaltenüberschriften zu ziehen.
Ein UserControl verwendet die Designerklasse System.Windows.Forms.Design.ControlDesigner. Es macht nichts Besonderes, sondern legt nur ein Rechteck um das Steuerelement mit Ziehpunkten. Sie sehen, worauf das hinausläuft: Nachdem Sie Ihr Benutzersteuerelement auf einem Formular platziert haben, wird ControlDesigner verwendet, um die Klasse zu entwerfen, ListViewDesigner ist nicht im Spiel. Sie verlieren also die Möglichkeit, die Spaltenüberschriften zu ziehen. Beachten Sie auch, dass ControlDesigner keinen Zugriff auf die Steuerelemente innerhalb der UC gibt.
Das lässt sich jedoch beheben, indem Sie einen eigenen Designer erstellen. Starten Sie mit Projekte + Verweis hinzufügen, wählen Sie System.Design. Sie müssen dem UC eine öffentliche Eigenschaft hinzufügen, um die Listenansicht sichtbar zu machen und das Attribut [DesignerSerializationVisibility] anwenden, damit geänderte Eigenschaften gespeichert werden können. Und wenden Sie das Attribut [Designer] auf die UC-Klasse an, um den Standarddesigner zu ersetzen. Das Ganze sollte folgendermaßen aussehen (unter Verwendung der Standardnamen und einer Listenansicht, die "Mitarbeiter" anzeigt):
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design; // Note: add reference required: System.Design.dll
namespace WindowsFormsApplication1 {
[Designer(typeof(MyDesigner))] // Note: custom designer
public partial class UserControl1 : UserControl {
public UserControl1() {
InitializeComponent();
}
// Note: property added
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ListView Employees { get { return listView1; } }
}
// Note: custom designer class added
class MyDesigner : ControlDesigner {
public override void Initialize(IComponent comp) {
base.Initialize(comp);
var uc = (UserControl1)comp;
EnableDesignMode(uc.Employees, "Employees");
}
}
}
Die Listenansicht in der Benutzersteuerung kann nun wie gewohnt angeklickt und gestaltet werden.