Events и CollectionEditor
От: _Umka  
Дата: 22.02.05 10:10
Оценка:
Как сделать так, чтобы можно было бы назначать обработчики событий объектам в CollectionEditor?
--
То, что вы уникальны еще не значит, что от вас есть толк
Re: Events и CollectionEditor
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.02.05 12:12
Оценка:
Здравствуйте, _Umka, Вы писали:

_U>Как сделать так, чтобы можно было бы назначать обработчики событий объектам в CollectionEditor?


ИМХО только написать свой CollectionEditor, либо отнаследовать элементы коллекции от Component и назначать обработчики в основном гриде.
... << RSDN@Home 1.1.4 beta 4 rev. 344>>
AVK Blog
Re[2]: Events и CollectionEditor
От: _Umka  
Дата: 24.02.05 12:55
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


_U>>Как сделать так, чтобы можно было бы назначать обработчики событий объектам в CollectionEditor?


AVK>ИМХО только написать свой CollectionEditor, либо отнаследовать элементы коллекции от Component и назначать обработчики в основном гриде.


Вот только при добалении элементов коллекции они не появляются в RootDesigner во всяком случае в VS.
Я посмотрел рефлектором, как в студии это сделано. Получается что никак.
Мной написан свой дизайнер форточек, просто ломало выискивать особенности работы CollectionEdtitor вот и спросил.
Чтобы добавить панельку свойств в редактор свойств нужно сделать следующее
...
        _PropertyGrid.Site = (new CustomContainer(DesignerHost)).CreateSite(_PropertyGrid);
        _PropertyGrid.PropertyTabs.AddTabType(typeof(System.Windows.Forms.Design.EventsTab), PropertyTabScope.Document);

...
        class CustomContainer : Container
    {
        private IServiceProvider _ServiceProvider;

        public CustomContainer (IServiceProvider ServiceProvider)
        {
            _ServiceProvider = ServiceProvider;
        }

        protected override object GetService(Type serviceType)
        {
            object service = base.GetService(serviceType);

            if (service == null) 
            {
                service = _ServiceProvider.GetService(serviceType);
            }

            return service;
        }

        public ISite CreateSite(IComponent component)
        {
            return CreateSite(component, "UNKNOWN_SITE");
        }
        
        protected override ISite CreateSite(IComponent component,string name)
        {
            return new CustomSite(component, this, name);
        }


        /// <summary>
        /// site for event binding service
        /// </summary>
        class CustomSite : ISite
        {
            private string _Name = "";
            private IComponent _Component;
            private CustomContainer _CustomContainer;

            public CustomSite(IComponent Component, CustomContainer CustomContainer, string Name)
            {
                _Component = Component;
                _CustomContainer = CustomContainer;
                _Name = Name;
            }

            public IComponent Component
            {
                get{ return _Component;}
            }
            public IContainer Container
            {
                get{return _CustomContainer;}
            }

            public bool DesignMode
            {
                get{return false;}
            }

            public string Name 
            {
                get{ return _Name;}
                set{_Name = value;}
            }

            public object GetService(Type ServiceType)
            {
                object o = _CustomContainer.GetService(ServiceType);        
                return o;
            }
        }
    }



также реализовать IEventBindingService и еще кучу сервисов.
--
То, что вы уникальны еще не значит, что от вас есть толк
Re[2]: Events и CollectionEditor
От: _Umka  
Дата: 24.02.05 13:26
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


_U>>Как сделать так, чтобы можно было бы назначать обработчики событий объектам в CollectionEditor?


AVK>ИМХО только написать свой CollectionEditor, либо отнаследовать элементы коллекции от Component и назначать обработчики в основном гриде.


Это же надо было так... вобщем, ставим атрибут DesignTimeVisible(true) и элементы коллекции появляются в дизайнере.
--
То, что вы уникальны еще не значит, что от вас есть толк
Re[3]: Events и CollectionEditor
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.02.05 13:35
Оценка:
Здравствуйте, _Umka, Вы писали:

AVK>>ИМХО только написать свой CollectionEditor, либо отнаследовать элементы коллекции от Component и назначать обработчики в основном гриде.


_U>Вот только при добалении элементов коллекции они не появляются в RootDesigner во всяком случае в VS.


См. выделенное.
... << RSDN@Home 1.1.4 beta 4 rev. 344>>
AVK Blog
Re[3]: Events и CollectionEditor
От: Vitaton Россия  
Дата: 24.02.05 13:37
Оценка:
Здравствуйте, _Umka, Вы писали:

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


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


_U>>>Как сделать так, чтобы можно было бы назначать обработчики событий объектам в CollectionEditor?


AVK>>ИМХО только написать свой CollectionEditor, либо отнаследовать элементы коллекции от Component и назначать обработчики в основном гриде.


_U>Это же надо было так... вобщем, ставим атрибут DesignTimeVisible(true) и элементы коллекции появляются в дизайнере.


Ну, в принципе никто не мешает в таком случае, просто в окошке Properties выбирать необходимый объект и уже после этого назначать ему обработчик.
Useless lamer
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.