Добрый день, господа! Очень прошу помочь в одном простом, но редком вопросе: Пишу свой дизайнер форм. К сожалению, документация по этому вопросу безобразная, из примеров тоже не всё понятно. Читал небезызвестный трактат http://www.divil.co.uk/net/articles/designers/hosting.asp , но он тоже не дал ответа. Затыка в следующем: Мне нужно сделать ComponentTray, куда валятся невизуальные компоненты. Как его надо создавать/получать и куда потом засовывать? Уверен, это решение на 3 строки, но так нигде и не нашёл. Пожалуйста, напишите конкретный C# код, чтобы лишний раз не переспрашивать.
Заранее благодарю!
T>Затыка в следующем: Мне нужно сделать ComponentTray, куда валятся невизуальные компоненты. Как его надо создавать/получать и куда потом засовывать? Уверен, это решение на 3 строки, но так нигде и не нашёл. Пожалуйста, напишите конкретный C# код, чтобы лишний раз не переспрашивать.
Вобщето ComponentTray создаётся автоматически. Вы подписали ваш RootComponent дизайнером ?
[Designer(typeof(DocumentDesigner), typeof(IRootDesigner))]
// ваш RootComponentpublic class DesignerRoot : UserControl
А вот если надо отделить ComponentTray от RootComponent, то придётся писать свой дизайнер.
... << RSDN@Home 1.1.4 beta 7 rev. 458>>
Re[2]: Как создать ComponentTray для Form Designer?
T>form = (Form)host.CreateComponent(typeof(Form)); T>rootDesigner = (IRootDesigner)host.GetDesigner(form); T>view = (Control)rootDesigner.GetView(ViewTechnology.Default); T>view.Dock = DockStyle.Fill; T>pnlViewHost.Controls.Add(view); T>[/c#]
Если драли с примера http://www.divil.co.uk/net/articles/designers/hosting.zip то всё должно работать.
По умолчанию форма уже подписана этим атрибутом и если правильно реализован IContainer.Add то там и инициализируется этот дизайнер. (кстати в статье это написано ) А в методе иниализации дизайнер подписыватся на IComponentChangeService.ComponentAdded и в обработчике события цепляет ComponentTray к дизайнеру, если добавляется компонент. Всё автоматически. Если что не ясно Reflector в руки и вперёд.
T>Надо подписать вот этот rootDesigner? А почему тогда он работает без подписи? (правда, и без трэя )
Дизайнер с простыми контролами работает ?
Вот вполне кошерная статья на русском здесь
И ещё пример дизайнера здесь
... << RSDN@Home 1.1.4 beta 7 rev. 458>>
Re[4]: Как создать ComponentTray для Form Designer?
Здравствуйте, Dog, Вы писали:
Dog>Если драли с примера ...
Ага, вот оттеда и брал Я так понял, это единственный нормальный пример на весь интернет? Нда, что-то тухло у мелкомягких с УПРОЩЕНИЕМ РАЗРАБОТКИ. Плин...
Dog> то всё должно работать.
Точно! Заработало! Просто пока в форме нет невизуальных компонент, этот трей просто НЕ ВИДЕН! Кто бы знал...
Dog>По умолчанию форма уже подписана этим атрибутом и если правильно реализован IContainer.Add ....
Не-не, всё, хватит! Ну его, этот ВСТРОЕННЫЙ ДИЗАЙНЕР к монаху! Больше е$ёшься, чтобы его ЗАСТАВИТЬ РАБОТАТЬ, чем реально делаешь дела. Я своими мозолистыми руками реализовал механизм selection и всё теперь под моим контролем, даже цвета рамочек.
Dog>Дизайнер с простыми контролами работает ?
Ага, всё там работает. Одна только беда — НИЧЕГО не понятно. А после полугода там вообще будет тёмный лес — ни изменить, ни дописать. Так что свой код — он надёжнее...
Dog>Вот вполне кошерная статья на русском
ОК, спасибо, Догги! Да там целый .NET реализован! И это называется мелкософт помогает разрабатывать дизайнер — 90% кода пишешь сам, да и то после подсказки. Опять из windows-программистов делают дебилов...
Re[5]: Как создать ComponentTray для Form Designer?
Dog>>Если драли с примера ... T>Ага, вот оттеда и брал Я так понял, это единственный нормальный пример на весь интернет? Нда, что-то тухло у мелкомягких с УПРОЩЕНИЕМ РАЗРАБОТКИ. Плин...
Дельфи вам в руки
Dog>> то всё должно работать. T>Точно! Заработало! Просто пока в форме нет невизуальных компонент, этот трей просто НЕ ВИДЕН! Кто бы знал...
эээ... вроде логично.
Dog>>По умолчанию форма уже подписана этим атрибутом и если правильно реализован IContainer.Add .... T>Не-не, всё, хватит! Ну его, этот ВСТРОЕННЫЙ ДИЗАЙНЕР к монаху! Больше е$ёшься, чтобы его ЗАСТАВИТЬ РАБОТАТЬ, чем реально делаешь дела. Я своими мозолистыми руками реализовал механизм selection и всё теперь под моим контролем, даже цвета рамочек.
Конечно, свой велосипед ближе к заднице
А что за рамочки ?
Dog>>Дизайнер с простыми контролами работает ? T>Ага, всё там работает. Одна только беда — НИЧЕГО не понятно. А после полугода там вообще будет тёмный лес — ни изменить, ни дописать. Так что свой код — он надёжнее...
С дизайнером единственная проблема — это отладка, если где-то косяк, то ловить глюки можно долго
Dog>>Вот вполне кошерная статья на русском T>ОК, спасибо, Догги! Да там целый .NET реализован! И это называется мелкософт помогает разрабатывать дизайнер — 90% кода пишешь сам, да и то после подсказки. Опять из windows-программистов делают дебилов...
Я и говорю, пишите на Дельфи
...где-то между собакой и богом...
Re[6]: Как создать ComponentTray для Form Designer?
T>>Нда, что-то тухло у мелкомягких с УПРОЩЕНИЕМ РАЗРАБОТКИ. Плин... Dog>Дельфи вам в руки
А ты думаешь я откуда в .NET пришёл?
T>>Я своими мозолистыми руками реализовал механизм selection и всё теперь под моим контролем, даже цвета рамочек. Dog>Конечно, свой велосипед ближе к заднице Dog>А что за рамочки ?
Ну которыми селектнутые контролы выделяются.
Dog>С дизайнером единственная проблема — это отладка, если где-то косяк, то ловить глюки можно долго
Не сложнее, чем с любой другой программой. Достаточно один раз сделать самому, чтобы понять, что ничего особенного в нём нет. Жаль только время на велосипеды тратить...
T>>Опять из windows-программистов делают дебилов... Dog>Я и говорю, пишите на Дельфи
Хих... Можно, но смысл? Продукт считай что умер, у Win32 тоже в перспективе упразднение. Проще уж в Линукс с Перлом уйти.