Отображение событий UserControl в design-mode
От: irium  
Дата: 14.09.05 11:57
Оценка:
При написании UserControl'а столкнулся с проблемой:

public class MyControl : UserControl
{
    ...
    public event EventHandler MyEvent;
    ...
}


После добавления контрола на форму в редакторе свойств не отображаются события. При наследовании от WebControl -- все нормально. Пробовал
[Designer("UserControlDesigner")]
public class MyControl : UserControl
{
...

и т.п., и все тоже работает, но в HTML-view контрол выделен красным цветом "Error creating control".
Подскажите, как сделать правильно и, желательно, без написания своего designer'а.
Re: Отображение событий UserControl в design-mode
От: andreich78 Россия  
Дата: 14.09.05 13:26
Оценка:
Здравствуйте, 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.
Re[2]: Отображение событий UserControl в design-mode
От: irium  
Дата: 14.09.05 13:45
Оценка:
Здравствуйте, andreich78, Вы писали:
A>странно что совсем нет событий. или ты имел в виду свои события?
Вообще НИКАКИХ. В дизайнере даже кнопки с молнией нет (

Но после добавления аттрибута
I>>
I>>[Designer("System.Web.UI.Design.BlaBlaBlaDesigner, System.Design")]
I>>

кнопка и события (как унаследованные, так и мои) появляются....?
То бишь, нужный эффект достигается просто путем добавления аттрибута, даже если с ошибочным значением.
Думаю, что нужно просто указать правильный дизайнер. Например, с ControlDesigner все работает на ура, но контрол в design-mode уже не отрисовывается, как раньше.

A>наверное, самый простой способ — пишешь промежуточный базовый класс и наследуешь свой юзерконтрол от него. событие объявляешь в этом базовом классе. базовый класс ессно — наследник от UserControl.

)) дык у меня так и было сделано
Re[3]: Отображение событий UserControl в design-mode
От: andreich78 Россия  
Дата: 14.09.05 13:53
Оценка:
Здравствуйте, 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"
}


можешь указывать правильный дизайнер сколько душе угодно.
Re[4]: Отображение событий UserControl в design-mode
От: irium  
Дата: 14.09.05 14:21
Оценка:
Здравствуйте, 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'ы ему не нужны....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.