Дизайнер Windows Forms имеет выделенные классы конструктора для большинства элементов управления. Конструктор для ListView - это System.Windows.Forms.Design.ListViewDesigner, внутренний класс в сборке System.Design.dll. Этот класс дает вам возможность перетаскивать заголовки столбцов.
UserControl использует класс конструктора System.Windows.Forms.Design.ControlDesigner. Он не делает ничего особенного, просто помещает прямоугольник вокруг элемента управления с помощью перетаскивания. Вы можете видеть, к чему это ведет: после того, как вы поместили свой пользовательский элемент управления в форму, для разработки класса используется ControlDesigner, а ListViewDesigner отсутствует на рисунке. Таким образом, вы теряете возможность перетаскивать заголовки столбцов. Также обратите внимание, что ControlDesigner не предоставляет доступ к элементам управления внутри UC.
Однако это можно исправить, создав собственного дизайнера. Начните с Projects + Add Reference, выберите System.Design. Вам потребуется добавить открытое свойство в UC, чтобы открыть представление списка, и применить атрибут [DesignerSerializationVisibility], чтобы разрешить сохранение измененных свойств. И примените атрибут [Designer] к классу UC, чтобы заменить конструктор по умолчанию. Все это должно напоминать это (с использованием имен по умолчанию и ListView, который отображает «сотрудники»):
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");
}
}
}
Теперь можно просмотреть список в пользовательском элементе управления и создать его как обычно.