Как добавить обработку чего-то после EndInit()?
От: avgur  
Дата: 23.04.03 14:23
Оценка:
Пишу свой грид.

Какую функцию я должен добавть в него, чтобы вызвался некий мой же код при выполнении такой строчки в форме, где этот грид будет помещен?


((System.ComponentModel.ISupportInitialize)(this.dataGridSessions2)).EndInit();
Re: Как добавить обработку чего-то после EndInit()?
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.04.03 19:39
Оценка:
Здравствуйте, avgur, Вы писали:

A>Какую функцию я должен добавть в него, чтобы вызвался некий мой же код при выполнении такой строчки в форме, где этот грид будет помещен?

A>((System.ComponentModel.ISupportInitialize)(this.dataGridSessions2)).EndInit();

Нужно поместить его в конструктор после вызова метода инициализации компонетнов.

Если тебе нужно добавлять свой код, то без CodDOM-а у тебя ничего не выйдет. EndInit() именно им добавляется.

Но могу сразу сказать, что раз у тебя до такого дошло, то однозначно имеет факт кривого дизайна.

С идеологией WinForms ненужно бороться. Ее нужно осознать и жить с ней в мире и согласии.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Как добавить обработку чего-то после EndInit()?
От: Trantor Россия  
Дата: 24.04.03 05:06
Оценка:
Здравствуйте, avgur, Вы писали:

A>Пишу свой грид.


A>Какую функцию я должен добавть в него, чтобы вызвался некий мой же код при выполнении такой строчки в форме, где этот грид будет помещен?


A>((System.ComponentModel.ISupportInitialize)(this.dataGridSessions2)).EndInit();


Если я тебя правильно понял... Реализуешь своим гридом интерфейс ISupportInitialize, в методе EndInit() прописываешь свои действия, а когда будешь кидать грид на форму EndInit() у тебя автоматически попадет в конец InitializeComponent() и его код будет выполнен при инициализации формы.
... << RSDN@Home 1.0 beta 6a >>
В жизни мало быть умным, надо еще быть не дураком.
Re[2]: Как добавить обработку чего-то после EndInit()?
От: avgur  
Дата: 24.04.03 06:11
Оценка:
Здравствуйте, 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()?
От: Trantor Россия  
Дата: 24.04.03 07:51
Оценка:
Здравствуйте, avgur, Вы писали:

skip

может какая то особенность, что без явного указания интерфейса метод для ISupportInitialize не переопредялется и вызывается старый EndInit() если есть желание создай тестовый контрол с ISupportInitialize отнаследуйся и посотри в отладчике какой EndInit() вызывается...
... << RSDN@Home 1.0 beta 6a >>
В жизни мало быть умным, надо еще быть не дураком.
Re[3]: Как добавить обработку чего-то после EndInit()?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.04.03 08:23
Оценка:
Здравствуйте, avgur, Вы писали:

Дык от тебя требуется реализовать интерфейс. Можешь вообще попробовать его не делать public:

  public class CDataGrid : System.Windows.Forms.DataGrid, ISupportInitialize
  {
    ....
    void ISupportInitialize.EndInit()
    {
    }

  }
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Как добавить обработку чего-то после EndInit()?
От: avgur  
Дата: 24.04.03 08:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, avgur, Вы писали:


VD>Дык от тебя требуется реализовать интерфейс. Можешь вообще попробовать его не делать public:


VD>
VD>  public class CDataGrid : System.Windows.Forms.DataGrid, ISupportInitialize
VD>  {
VD>    ....
VD>    void ISupportInitialize.EndInit()
VD>    {
VD>    }

VD>  }
VD>


Теперь вопрос в том зачем укахывать ISupportInitialize. Ведь в MSDN System.Windows.Forms.DataGrid
уже реализует ISupportInitialize.
Re[3]: Как добавить обработку чего-то после EndInit()?
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 24.04.03 09:14
Оценка:
Здравствуйте, 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()?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.04.03 15:35
Оценка:
Здравствуйте, avgur, Вы писали:

A>Теперь вопрос в том зачем укахывать ISupportInitialize. Ведь в MSDN System.Windows.Forms.DataGrid

A>уже реализует ISupportInitialize.

За тем что это не С++. Твой объект явно должен реализовывать интерфейс. Они же через рефлекшон лезут.
... << RSDN@Home 1.0 beta 6a >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.