Скрытие событий вложенного элемента управления в конструкторе (DesignTime) с использованием C # и .NET 4.0 - PullRequest
0 голосов
/ 30 марта 2012

Следующий код является простым примером, представляющим мою проблему:

public class MyBase : Component
{
    private int _Value;
    public int Value
    {
        get
        {
            return this._Value;
        }
        set
        {
            this._Value = value;
            if (ValueChanged != null)
            {
                ValueChanged(this, new EventArgs());
            }
        }
    }

    public event EventHandler ValueChanged;
}

public class MyVisu : Control
{
    public MyBase Base { get; set; }
}

Оба, MyBase и MyVisu, должны иметь возможность использоваться в качестве компонента в конструкторе форм во время разработки.Это работает до сих пор.Если я добавляю экземпляр MyBase () в тестовую форму через конструктор и обрабатываю его событие ValueChanged, все работает нормально.

Проблема возникает, когда я добавляю в форму экземпляр MyVisu ().Если я пытаюсь обработать событие MyVisuInstance.MyBase.ValueChanged через конструктор, появляется следующее сообщение об ошибке:

Невозможно установить события для объекта, переданного службе привязки событий, поскольку сайт связан собъект не может быть найден.

Мне нужно, чтобы это событие было видно в конструкторе только при добавлении экземпляра MyBase.Мне не нужно, чтобы это событие было видно на конструкторе в случае добавления экземпляра MyVisu.Итак, есть ли возможность в этом случае скрыть это событие в конструкторе в режиме конструктора?

Я знаю, что мог бы контролировать видимость, либо реализовав интерфейс ICustomTypeDescriptor, либо реализовав собственный TypeConverter.К сожалению, это повлияет на оба события (в MyBase и в MyVisu).

Кстати, другой вариант, конечно, будет то, что кто-то может сказать мне, как избежать сообщения об ошибке.; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...