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