Здравствуйте, 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 и еще кучу сервисов.
--
То, что вы уникальны еще не значит, что от вас есть толк
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, _Umka, Вы писали:
_U>>Как сделать так, чтобы можно было бы назначать обработчики событий объектам в CollectionEditor?
AVK>ИМХО только написать свой CollectionEditor, либо отнаследовать элементы коллекции от Component и назначать обработчики в основном гриде.
Это же надо было так... вобщем, ставим атрибут DesignTimeVisible(true) и элементы коллекции появляются в дизайнере.
--
То, что вы уникальны еще не значит, что от вас есть толк
Здравствуйте, _Umka, Вы писали:
AVK>>ИМХО только написать свой CollectionEditor, либо отнаследовать элементы коллекции от Component и назначать обработчики в основном гриде.
_U>Вот только при добалении элементов коллекции они не появляются в RootDesigner во всяком случае в VS.
Здравствуйте, _Umka, Вы писали:
_U>Здравствуйте, AndrewVK, Вы писали:
AVK>>Здравствуйте, _Umka, Вы писали:
_U>>>Как сделать так, чтобы можно было бы назначать обработчики событий объектам в CollectionEditor?
AVK>>ИМХО только написать свой CollectionEditor, либо отнаследовать элементы коллекции от Component и назначать обработчики в основном гриде.
_U>Это же надо было так... вобщем, ставим атрибут DesignTimeVisible(true) и элементы коллекции появляются в дизайнере.
Ну, в принципе никто не мешает в таком случае, просто в окошке Properties выбирать необходимый объект и уже после этого назначать ему обработчик.