При написании UserControl'а столкнулся с проблемой:
public class MyControl : UserControl
{
...
public event EventHandler MyEvent;
...
}
После добавления контрола на форму в редакторе свойств не отображаются события. При наследовании от WebControl -- все нормально. Пробовал
[Designer("UserControlDesigner")]
public class MyControl : UserControl
{
...
и т.п., и все тоже работает, но в HTML-view контрол выделен красным цветом "Error creating control".
Подскажите, как сделать правильно и, желательно, без написания своего designer'а.
Здравствуйте, irium, Вы писали:
I>При написании UserControl'а столкнулся с проблемой:
I>I>public class MyControl : UserControl
I>{
I> ...
I> public event EventHandler MyEvent;
I> ...
I>}
I>
I>После добавления контрола на форму в редакторе свойств не отображаются события. При наследовании от WebControl -- все нормально.
странно что совсем нет событий. или ты имел в виду свои события?
I>Пробовал
I>I>[Designer("UserControlDesigner")]
I>public class MyControl : UserControl
I>{
I>...
I>
I>и т.п., и все тоже работает, но в HTML-view контрол выделен красным цветом "Error creating control".
1. этой строчки недостаточно, нужно "System.Web.UI.Design.UserControlDesigner, System.Design"
2. эта строчка не поможет

, дизайнер и так этот.
I>Подскажите, как сделать правильно и, желательно, без написания своего designer'а.
наверное, самый простой способ — пишешь промежуточный базовый класс и наследуешь свой юзерконтрол от него. событие объявляешь в этом базовом классе. базовый класс ессно — наследник от UserControl.
Здравствуйте, andreich78, Вы писали:
A>странно что совсем нет событий. или ты имел в виду свои события?
Вообще НИКАКИХ. В дизайнере даже кнопки с молнией нет

(
Но после добавления аттрибута
I>>I>>[Designer("System.Web.UI.Design.BlaBlaBlaDesigner, System.Design")]
I>>
кнопка и события (как унаследованные, так и мои) появляются....?
То бишь, нужный эффект достигается просто путем добавления аттрибута, даже если с ошибочным значением.
Думаю, что нужно просто указать правильный дизайнер. Например, с ControlDesigner все работает на ура, но контрол в design-mode уже не отрисовывается, как раньше.
A>наверное, самый простой способ — пишешь промежуточный базовый класс и наследуешь свой юзерконтрол от него. событие объявляешь в этом базовом классе. базовый класс ессно — наследник от UserControl.

)) дык у меня так и было сделано
Здравствуйте, irium, Вы писали:
I>Здравствуйте, andreich78, Вы писали:
A>>странно что совсем нет событий. или ты имел в виду свои события?
I>Вообще НИКАКИХ. В дизайнере даже кнопки с молнией нет
(
I>Но после добавления аттрибута
I>>>I>>>[Designer("System.Web.UI.Design.BlaBlaBlaDesigner, System.Design")]
I>>>
I>кнопка и события (как унаследованные, так и мои) появляются....?
I>То бишь, нужный эффект достигается просто путем добавления аттрибута, даже если с ошибочным значением.
I>Думаю, что нужно просто указать правильный дизайнер. Например, с ControlDesigner все работает на ура, но контрол в design-mode уже не отрисовывается, как раньше.
A>>наверное, самый простой способ — пишешь промежуточный базовый класс и наследуешь свой юзерконтрол от него. событие объявляешь в этом базовом классе. базовый класс ессно — наследник от UserControl.
I>
)) дык у меня так и было сделано
было:
public class MyControl : UserControl
{
...
public event EventHandler MyEvent;
...
}
надо:
public class MyBaseControl : UserControl
{
...
public event EventHandler MyEvent;
//у этого контрола в дизайн-тайме НЕТ события "MyEvent"
...
}
public class MyControl : MyBaseControl
{
...
//у этого контрола в дизайн-тайме ЕСТЬ событие "MyEvent"
}
можешь указывать правильный дизайнер сколько душе угодно.
Здравствуйте, andreich78, Вы писали:
A>было:
A>A>public class MyControl : UserControl
A>{
A> ...
A> public event EventHandler MyEvent;
A> ...
A>}
A>
A>надо:
A>A>public class MyBaseControl : UserControl
A>{
A> ...
A> public event EventHandler MyEvent;
A> //у этого контрола в дизайн-тайме НЕТ события "MyEvent"
A> ...
A>}
A>public class MyControl : MyBaseControl
A>{
A> ...
A>//у этого контрола в дизайн-тайме ЕСТЬ событие "MyEvent"
A>}
A>
У меня все равно НЕТ

(((
Вылечить пришлось все-таки путем написания собственного дизайнера:
class FrameControlDesigner: System.Web.UI.Design.UserControlDesigner
{
public override bool ShouldCodeSerialize
{
get { return true; }
}
}
Уж не знаю, как с этим связан ShouldCodeSerialize, но это работает. Наверное, framework считает, что если не надо автоматом создавать переменную в code-behind, то и event'ы ему не нужны....