Re: Свои контролы в C# (работа с ними из дизайнера)
От: Pavel_Agurov Россия  
Дата: 14.01.08 11:25
Оценка:
AZ>1) Свойства своих классов в дизайнере
AZ>Есть мой контрол (MyControl) — лейбл имеющий рамку и текст которые умеют моргать и менять цвета, наследованный от UserControl, который использует мои классы не наследованные ни от чего (MyText, MyBorder) — они собственно и умеют моргать и менять цвета
AZ> Так вот — как заставить дизайнер отображать и изменять свойства MyText и MyBorder, чтобы они выбирались в ToolBox'е как выпадающий список свойств, а не определяя свойства этих классов как свойства MyControl?

Не понятно что куда должно выпадать. Можно например прицепить к Mytext и MyBorder атрибут ExpandableObjectConverter.


[TypeConverter(typeof(ExpandableObjectConverter))]
public class MyBorder
{
...
}


Тогда свойство MyBorder будет распахиваться в дизайнере как например Font.

AZ>2) Групповое переименование контролов в дизайнере

AZ>Есть тот же MyControl. На форме их может быть очень много (20-60 штук), разделенных на группы по именам (т.е. MyControl_A1..n, MyControl_B1..n, MyControl_C1..n) и они кидаются на форму вручную (в основном Ctrl+C, Ctrl+V)
AZ>Как сделать так, чтобы можно было переименовать группу контролов (MyControl1..n) -> (MyControl_A1..n), или, если можно написать, чтобы при копировании контрола копировались не только свойства но и имя его, тока индекс новый?

Посмотрите метод InitializeNewComponent класса ComponentDesigner. Еще есть класс DesignerSurface и у него ResolveName.
Хотя тут надо определиться с вопросом "а зачем это надо" и тогда искать решения.

AZ>3) Индексация контролов

AZ>Как получить доступ к одному контролу из группы (могут быть в разных контейнерах типа панель) по индексу?
AZ>Придумал только вариант выделения индекса из имени контрола:

Возможно подойдет IExtenderProvider.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.