Я попытаюсь объяснить, что я после. Я не знаю технический термин для него, таким образом, здесь идет:
Пример 1: Если я размещаю ListView в Форму и добавляю некоторые столбцы, я могу, во Время проектирования, перетащить столбцы для изменения размеров их.
Пример 2: Теперь, я размещаю ListView в UserControl и называю его "MyCustomListView" (и возможно добавляю некоторый метод для улучшения его так или иначе).
Если я знаю, помещают "MyCustomListView" в Форму, я не могу перетащить заголовки столбцов для изменения размеров их во Время проектирования.
Там какой-либо путь состоит в том, чтобы легко заставить это произойти? Некоторая форма "передачи событие перетаскивания к базовому управлению и позволила тому управлению сделать свое волшебство". Я действительно не надеюсь повторно кодировать, просто передавать щелчок мышью (или независимо от того, что это), и позвольте, в этом случае, ListView реагируют, как это сделало в первом примере выше.
Конструктор 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], чтобы разрешить сохранение измененных свойств. И примените атрибут [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");
}
}
}
Теперь можно щелкнуть представление списка в пользовательском элементе управления и оформить его как обычно.