Здравствуйте, TK, Вы писали:
TK>Здравствуйте, Аноним, Вы писали:
А>>Как узнать, мой компонет сейчас в дизайне или в выполняемом приложении?
TK>Через Component.Site.DesignMode
В рантайме Site можеь быть равен null, тачто будь осторожен!
... << RSDN@Home 1.1.3 stable Бутусов — Берег>>
Re[2]: Компонент в дизайне?
От:
Аноним
Дата:
26.05.04 14:54
Оценка:
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, Аноним, Вы писали:
А>>Как узнать, мой компонет сейчас в дизайне или в выполняемом приложении?
TK>Через Component.Site.DesignMode
Спасибо.
Хотя еще вопрос, как вообще сделать так чтобы компонент сделал основное вычисление после того как
установлены все его свойства. В Component Designer generated code все свойства устанавливаются поочереди (в алфавитном порядке вроде.),и свойство активации может быть и вначале.
Как узнать что все свойства установлены и пора сто-то сделать автоматически?
Я конечно смогу запустить процедуру пересчета, Но хотелось бы узнать как это сделать автоматом.
Дело в том что работу компонента можно посмотреть и в DesignMode. естьсвойство Activate которое нужно установить в true и результирующие ReadOnly property заполнятся.
При старте формы Activate если я оставил его в true активируется первым, но неработает так как неустановлены
другие свойства... (вроде понятно рассказал?)
ISupportInitialize allows controls to optimize for multiple sets to properties. As a result, you can initialize co-dependent properties or batch set multiple properties at design time.
Call the BeginInit method to signal the object that initialization is starting. Call the EndInit method to signal that initialization is complete.
Здравствуйте, <Аноним>, Вы писали:
А>Как узнать что все свойства установлены и пора сто-то сделать автоматически?
Тебе просто необходимо реализовать интерфейс ISupportInitialize
Только это не всегда работает. Например, не работает для конструкторов базовых форм.
Более точно можно определить, трассируя стек вызова на наличие объектов, реализующих IDesignerHost.
Могу дать кусок кода.
Здравствуйте, VladD2, Вы писали:
TK>>>Через Component.Site.DesignMode VP>>В рантайме Site можеь быть равен null, тачто будь осторожен!
VD>С вероятностью 99.9999999999999999% .
Что то ты больно крутую вероятность забацал. У меня к примеру в одном из приложений он совсем не null. Не думаю что в мире свуществует 10000000000000000 приложений, написанных на дотнете и использующих компоненты.
Здравствуйте, Igor Trofimov, Вы писали:
iT>Только это не всегда работает. Например, не работает для конструкторов базовых форм. iT>Более точно можно определить, трассируя стек вызова на наличие объектов, реализующих IDesignerHost. iT>Могу дать кусок кода.
IDesignerHost вполне может обнаружится и в рантайме.
Здравствуйте, Igor Trofimov, Вы писали:
iT>Только это не всегда работает. Например, не работает для конструкторов базовых форм. iT>Более точно можно определить, трассируя стек вызова на наличие объектов, реализующих IDesignerHost. iT>Могу дать кусок кода.
А еще более точно занимаясь дизасемблированием кода.
Такие "подходы" являются ошибками дизайна и часто выливаются в кучу геморроя в будущем.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
VD>>С вероятностью 99.9999999999999999% .
AVK>Что то ты больно крутую вероятность забацал. У меня к примеру в одном из приложений он совсем не null. Не думаю что в мире свуществует 10000000000000000 приложений, написанных на дотнете и использующих компоненты.
А у меня вероятность в компонентах. Ты вот сам говоришь "в одном из...".
Кстати, зачем тебе нужен самопальный сайт если ты не делаешь дизайнер?
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
iT>>Только это не всегда работает. Например, не работает для конструкторов базовых форм. iT>>Более точно можно определить, трассируя стек вызова на наличие объектов, реализующих IDesignerHost. iT>>Могу дать кусок кода.
AVK>IDesignerHost вполне может обнаружится и в рантайме.
Во-во. Уж если выпендриваться, то перегружать свойство Site и т.п. А так то зачем?
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>А еще более точно занимаясь дизасемблированием кода. VD>Такие "подходы" являются ошибками дизайна и часто выливаются в кучу геморроя в будущем.
Отлично! Может у тебя есть другой рецепт выяснения, находится ли форма в design-time?
Или может "если это нужно знать, значит, ошибка в дизайне"?
Re[4]: Компонент в дизайне?
От:
Аноним
Дата:
27.05.04 06:54
Оценка:
Здравствуйте, TK, Вы писали:
TK>Hello, >> >> Хотя еще вопрос, как вообще сделать так чтобы компонент сделал основное вычисление после того как >> установлены все его свойства.
TK>для этого есть интерфейс ISupportInitialize. Его нужно реализовать
Help я прочитал, но так и не понял как его реализовать..
Вы не мудрите, вы пальцем покажите...
Обьясние если можно на пальцах и с маленьким примером.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, VladD2, Вы писали:
VD>>Кстати, зачем тебе нужен самопальный сайт если ты не делаешь дизайнер?
AVK>Чтобы в PropertyGrid можно было подсунуть в рантайме свой ServiceProvider. Сайт притом не самопальный, а вполне себе родной, фреймворковский.
Чтобы в PropertyGrid можно было подсунуть свой ServiceProvider, достаточно переопределить метод GetService у PropertyGrid. Иначе возможны траблы, какие не помню, но то что они были это точно. Все компоненты находились в дизайне т.е. имели нормальный сайт и полноценный набор сервисов в ServiceProvider, до нужного сервиса PropertyGrid не хотел достукиваться, изучил всю линеку объектов у которых он просил.
В итоге сутки искал причину, оказалось что-то связаное IComponentChangeService или IDesignerEventService, точнее не могу вспомнить. Кстати как потом обнаружил "Сама VS" подставляет свой ServiceProvider точно таким же образом, см Microsoft.VisualStudio.PropertyBrowser.PropertyGridHolder.