Здравствуйте, avgur, Вы писали:
A>Какую функцию я должен добавть в него, чтобы вызвался некий мой же код при выполнении такой строчки в форме, где этот грид будет помещен? A>((System.ComponentModel.ISupportInitialize)(this.dataGridSessions2)).EndInit();
Нужно поместить его в конструктор после вызова метода инициализации компонетнов.
Если тебе нужно добавлять свой код, то без CodDOM-а у тебя ничего не выйдет. EndInit() именно им добавляется.
Но могу сразу сказать, что раз у тебя до такого дошло, то однозначно имеет факт кривого дизайна.
С идеологией WinForms ненужно бороться. Ее нужно осознать и жить с ней в мире и согласии.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Как добавить обработку чего-то после EndInit()?
Здравствуйте, avgur, Вы писали:
A>Пишу свой грид.
A>Какую функцию я должен добавть в него, чтобы вызвался некий мой же код при выполнении такой строчки в форме, где этот грид будет помещен?
A>((System.ComponentModel.ISupportInitialize)(this.dataGridSessions2)).EndInit();
Если я тебя правильно понял... Реализуешь своим гридом интерфейс ISupportInitialize, в методе EndInit() прописываешь свои действия, а когда будешь кидать грид на форму EndInit() у тебя автоматически попадет в конец InitializeComponent() и его код будет выполнен при инициализации формы.
... << RSDN@Home 1.0 beta 6a >>
В жизни мало быть умным, надо еще быть не дураком.
Re[2]: Как добавить обработку чего-то после EndInit()?
Здравствуйте, Trantor, Вы писали:
T>Здравствуйте, avgur, Вы писали:
A>Пишу свой грид.
A>Какую функцию я должен добавть в него, чтобы вызвался некий мой же код при выполнении такой строчки в форме, где этот грид будет помещен?
A>((System.ComponentModel.ISupportInitialize)(this.dataGridSessions2)).EndInit();
T>Если я тебя правильно понял... Реализуешь своим гридом интерфейс ISupportInitialize, в методе EndInit() прописываешь свои действия, а когда будешь кидать грид на форму EndInit() у тебя автоматически попадет в конец InitializeComponent() и его код будет выполнен при инициализации формы.
Спасибо! Помогло! Но есть одна непонятная мне вещь
Когда класс грида так объявлен:
public class CDataGrid : System.Windows.Forms.DataGrid, ISupportInitialize
{
....
public new void EndInit()
{
}
}
то его EndInit() вызывается. А когда так:
public class CDataGrid : System.Windows.Forms.DataGrid
{
....
public new void EndInit()
{
}
}
то нет. Почему? Ведь в MSDN написано:
[msdn]
public class DataGrid : Control, ISupportInitialize
[/msdn]
Re[3]: Как добавить обработку чего-то после EndInit()?
может какая то особенность, что без явного указания интерфейса метод для ISupportInitialize не переопредялется и вызывается старый EndInit() если есть желание создай тестовый контрол с ISupportInitialize отнаследуйся и посотри в отладчике какой EndInit() вызывается...
... << RSDN@Home 1.0 beta 6a >>
В жизни мало быть умным, надо еще быть не дураком.
Re[3]: Как добавить обработку чего-то после EndInit()?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, avgur, Вы писали:
VD>Дык от тебя требуется реализовать интерфейс. Можешь вообще попробовать его не делать public:
VD>
Здравствуйте, avgur, Вы писали:
A> public class CDataGrid : System.Windows.Forms.DataGrid A> { A> public new void EndInit() A>public class DataGrid : Control, ISupportInitialize
В DataGrid уже есть реализация ISupportInitialize.EndInit, и new в потомке не оверрайдит ее.
Re[5]: Как добавить обработку чего-то после EndInit()?
Здравствуйте, avgur, Вы писали:
A>Теперь вопрос в том зачем укахывать ISupportInitialize. Ведь в MSDN System.Windows.Forms.DataGrid A>уже реализует ISupportInitialize.
За тем что это не С++. Твой объект явно должен реализовывать интерфейс. Они же через рефлекшон лезут.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.