CollectionEditor и сообщение об ошибке «Генерация кода для свойства« **** »не удалось» - PullRequest
3 голосов
/ 20 октября 2011

У меня есть пользовательский элемент управления, который использует свойство с CollectionEditor. И я использую другой проект в том же решении, чтобы проверить контроль. Мой редактор коллекций работает без проблем, за исключением того, что IDE выдает ошибку во время разработки после перекомпиляции компонента dll. Если я закрою IDE, чем снова открою решение, оно работает без проблем. Если я изменяю код элемента управления и перекомпилирую его, IDE выдает мне ту же ошибку. Я понял, что IDE не генерирует код для коллекции, если я перекомпилирую элемент управления. Но если я закрою и снова открою IDE, он сгенерирует код.

Сообщение об ошибке:

Ошибка генерации кода для свойства AProperty. Ошибка была: «[A] MyComponent.AProperty не может быть приведен к [B] MyComponent.AProperty. Тип А происходит от 'MyComponent; Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null 'в контексте' LoadNeither 'в расположении' ... \ AppData \ Local \ Microsoft \ VCSExpress \ 10.0 \ ProjectAssemblies \ 1f88w0l001 \ MyComponent.dll '. Тип B происходит от MyComponent; Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null 'в контексте' LoadNeither 'в местоположении' ... \ AppData \ Local \ Microsoft \ VCSExpress \ 10.0 \ ProjectAssemblies \ eb4apk_301 \ MyComponent.dll '.'

Вот свойство в элементе управления.

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [Editor(typeof(ACollectionEditor), typeof(UITypeEditor))]
    public ACollection AProperty { get { return prop; } }

А следующие коды CollectionEditor:

public class ACollectionEditor : CollectionEditor
{
    protected override object CreateInstance(Type itemType)
    {
        nameCounter++;
        //var newObj = Activator.CreateInstance(itemType, new object[] { "AProperty" + nameCounter.ToString(), parent} );
        var newObj = new AProperty("AProperty" + nameCounter.ToString());
        return newObj;
    }
}

1 Ответ

0 голосов
/ 14 апреля 2015

У меня была эта проблема с propety Время , и я решил ее после замены

SubTitleItem newSub = LearnItem.MainSub.GetSubByPosition(vlc.Time);

на

SubTitleItem newSub = LearnItem.MainSub.GetSubByPosition(GetPlayerPosition());

public long GetPlayerPosition() {
    return vlc.Time;
}

--- и ---

if (LearnItem.PlayerPosition != 0) vlc.Time = LearnItem.PlayerPosition;

с

if (LearnItem.PlayerPosition != 0) SetPlayerPosition(LearnItem.PlayerPosition);

public void SetPlayerPosition(long Pos) {
    vlc.Time = Pos;
}

Возможно, это всего лишь уловка, но это работа для меня.

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