Когда я создаю свой элемент управления (который наследует DataGrid), я добавляю определенные строки и столбцы. Это прекрасно работает во время разработки. К сожалению, во время выполнения я добавляю свои строки и столбцы в один и тот же конструктор, но затем DataGrid сериализуется (после запуска конструктора), добавляя больше строк и столбцов.
После завершения сериализации мне нужно очистить все и заново инициализировать строки и столбцы. Есть ли защищенный метод, который я могу переопределить, чтобы знать, когда завершается сериализация элемента управления?
Конечно, я бы предпочел не выполнять работу в конструкторе, выбрасывать ее и делать снова после (потенциальной) сериализации. Есть ли предпочтительное событие, которое эквивалентно «настроить себя сейчас», чтобы оно вызывалось один раз, независимо от того, сериализован я или нет?
Сериализация, о которой я говорю, происходит от метода InitializeComponent () в файле с выделенным кодом формы.
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
...
}
Было бы идеально, если бы InitializeComponent был виртуальным методом, определенным Control, тогда я мог бы просто переопределить его и затем выполнить мою обработку после того, как я вызову base:
protected override void InitializeComponent()
{
base.InitializeComponent();
InitializeMe();
}
Но это не метод предков, он объявлен только в файле с выделенным кодом.
я заметил, что InitializeComponent вызывает SuspendLayout и ResumeLayout для различных элементов управления. я думал, что это может переопределить ResumeLayout и выполнить мою инициализацию тогда:
public override void ResumeLayout()
{
base.ResumeLayout();
InitializeMe();
}
Но ResumeLayout не является виртуальным, так что его нет.
Больше идей? я не могу быть первым, кто создаст пользовательский элемент управления.