Visual Studio не генерирует код для создания экземпляра пользовательского элемента управления - PullRequest
2 голосов
/ 11 февраля 2009

Я создал пользовательский элемент управления с использованием C #, .Net3.5 и Visual Studio 2008.

Затем я добавляю этот элемент управления в другой элемент управления, перетаскивая его из панели инструментов.

После этого, когда я пытаюсь скомпилировать, я получаю сообщение об ошибке:

Error   1   Warning as Error: Field 'MyNamespace.MyControl._myCustomControl' is never assigned to, and will always have its default value null

Глядя на файл Designer.cs, это связано с тем, что VS никогда не генерирует следующий код:

this._rgReportGallery = new MyNameSpace.MyCustomControl();

Само поле есть, и код для добавления его в элемент управления, в который я его помещаю, просто отсутствует код создания экземпляра.

Я могу добавить этот код вручную, и все, кажется, работает, но как только файл designer.cs будет восстановлен, он снова пропадет.

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

Кто-нибудь знает, что может быть причиной этого?

Ответы [ 5 ]

3 голосов
/ 23 октября 2009

У меня возникла эта проблема, и ответ здесь помог мне найти ее, я использовал ключевое слово «internal» как для доступа к компоненту, так и для доступа конструктора. Как Брент упоминает в нескольких постах выше моего, у дизайнера VS, очевидно, есть проблемы с генерацией строки создания чего-либо, кроме общедоступного конструктора, поэтому никогда не создавайте пользовательский элемент управления, где доступность класса и конструктор (-ы) не являются чем-то иным, кроме «public». 1001 *

Кстати, это произошло для меня в Visual Studio 2005, и меня не удивляет, что это также произойдет и в Visual Studio 2008. Скорее всего, это происходит и в более ранних версиях VS.

2 голосов
/ 08 марта 2009

Также убедитесь, что конструкторы вашего UserControl общедоступны. У меня были проблемы с внутренними UserControls и генератором кода дизайнера VS2008 SP1 WinForms. Не удалось сгенерировать строку выделения, как вы упомянули.

2 голосов
/ 11 февраля 2009

Вы как-нибудь настраивали конструктор пользовательского элемента управления? Конструктор по умолчанию для элементов управления - без параметров, и я знаю, что в прошлом у меня были проблемы при создании конструктора для моих элементов управления, который требует параметров. В этих случаях я всегда предоставляю два конструктора. Таким образом, параметр без параметров остается для режима проектирования в VS.

0 голосов
/ 29 марта 2009

У вас есть последний пакет обновления для Visual Studio 2008? Обычно это происходит, когда у вас нет последнего пакета обновления.

0 голосов
/ 21 марта 2009

Несмотря на то, что файлы .Designer.cs выглядят как простой код, воспроизведение в этом коде очень рискованно, поскольку может легко сломать конструктор Windows Forms. Я слышал, что многие люди просто отказываются от дизайнера WinForms, потому что говорят, что он не работает. Это действительно легко сломать, но если вы не пытаетесь играть в файле .Designer.cs, это работает как шарм.

Если вы отредактировали файл Designer.cs вручную, это может объяснить, почему он продолжает переписывать себя неправильно. Трудно понять, как это исправить, хотя. Если ваш пользовательский интерфейс не слишком сложен для повторения, я бы просто переделал его (все, что находится в вашем основном .cs-файле, останется без изменений) В противном случае вы можете посмотреть на подобную форму, чтобы увидеть модель того, как именно она должна быть отформатирована (порядок утверждений важен).

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