Visual Studio 2010 постоянно меняет мой элемент управления winforms - PullRequest
2 голосов
/ 17 августа 2010

У меня странная ситуация с пользовательским элементом управления в VS 2010. Дизайнер форм постоянно меняет мою запись, а затем говорит мне, что ее не существует! Он компилируется и запускается в первый раз, а затем, если я изменяю что-то несвязанное, выдает ошибку в файле designer.cs ( Не удается разрешить символ SomeEntry ).

private SomeEntry someEntry;
// ...
this.someEntry = new **MyNameSpace**.SomeEntry();

если я удалю MyNameSpace.

this.someEntry = new SomeEntry();

это работает, пока я не внесу изменения снова. Если я смотрю на класс, когда мышь находится над измененным файлом конструктора, SomeEntry показывает SomeEntry.SomeEntry() вместо MyNameSpace.SomeEntry()

По сути, определение выглядит примерно так:

namespace MyNameSpace
{
    public partial class SomeEntry : FormValidatingUserControl
    {
        public SomeEntry()
        {
            InitializeComponent();
        }
    }
}

Итак, что мне делать?

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Оказывается, я должен был опубликовать свой код ТОЧНО, как он появился, так как я уверен, что кто-то бы понял это для меня раньше.

Проблема заключалась в том, что я пытался упростить пост и изменил имена MyNameSpace и SomeEntry, чтобы сделать его общим.

Проект - что-то пространство имен что-то (пока нормально), и сгенерированный класс что-то из структуры сущностей.

Чтобы воспроизвести проблему, я создал новый проект под названием WinFormTestX .Итак, решение WinFormTestX и проект WinFormTestX .Я добавил класс WinFormTestX, но ничего с ним не сделал.

namespace WinFormTestX
{
    public class WinFormTestX
    {
        public int ID { get; set; }
    }
}

Теперь я создаю UserControl (UserControl1) и опускаю на него простую кнопку.Скомпилируйте его, и набор инструментов добавляет этот элемент управления, как и ожидалось.Теперь я помещаю его в Form1, скомпилирую и получаю сообщение об ошибке:

Ошибка 1 Имя типа 'UserControl1' не существует в типе 'WinFormTestX.WinFormTestX' D: \ Data \ Projects \Temp \ WinFormTestX \ Form1.Designer.cs 31 51 WinFormTestX

Как только я щелкаю правой кнопкой мыши по классу WinFormTestX и Исключаем из проекта (или удаляем его), все работает.

Таким образом, просто наличие в проекте класса с тем же именем, что и пространство имен, даже если он не используется, вызывает проблему.Очевидно, теперь, когда я знаю причину, есть простой способ обойти это.Но является ли это «ошибкой», которую следует отправить в Microsoft?

1 голос
/ 17 августа 2010

Подобные вещи случались, когда я вручную перемещал класс в новое пространство имен. Если вы не будете осторожны, ваш класс может быть определен несколько раз. Например, может существовать остаточный файл конструктора .cs, который все еще определяет класс в его старом пространстве имен, или какое-то другое несоответствие .cs / .designer.cs. Другими словами, ваша сборка может содержать классы SomeEntry.SomeEntry и MyNameSpace.SomeEntry.

Проверьте браузер объектов Visual Studio, чтобы определить, определено ли SomeEntry в нескольких пространствах имен.

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