Ошибка дизайнера C # - PullRequest
3 голосов
/ 08 мая 2009

Я новичок в C #, поэтому прошу прощения, если я задаю глупые вопросы ...

Вот моя проблема:

  • У меня есть класс "ProtocolTabPage", который наследуется от "TabPage".
  • У меня есть «ControlPanel», которая наследуется от «Panel».
  • У меня есть ControlPanel, созданный моим ProtocolTabPage.
  • Оба моих класса находятся в пространстве имен "AutoTestProtocols.Interface".

В ProtocolTabPage [Design] у меня появляются следующие ошибки:

"Переменная 'ProtocolPanel' либо необъявлена, либо никогда не назначалась.

в System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error (менеджер IDesignerSerializationManager, String exceptionText, String helpLink) в System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression (менеджер IDesignerSerializationManager, имя строки, выражение CodeExpression) в System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression (менеджер IDesignerSerializationManager, имя строки, выражение CodeExpression) в System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement (менеджер IDesignerSerializationManager, инструкция CodeStatement) "

Хотя в моем ProtocolTabPage.Designer у меня есть

[...]
this.ProtocolPanel = new AutoTestProtocols.Interface.ControlPanel();
[...]
this.splitContainer1.Panel2.Controls.Add(this.ProtocolPanel);
[...]
this.ProtocolPanel.AutoScroll = true;
this.ProtocolPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.ProtocolPanel.Location = new System.Drawing.Point(0, 0);
this.ProtocolPanel.Name = "ProtocolPanel";
this.ProtocolPanel.Size = new System.Drawing.Size(696, 700);
this.ProtocolPanel.TabIndex = 0;
[...]
private AutoTestProtocols.Interface.ControlPanel ProtocolPanel;"

Что не так?

Ответы [ 4 ]

1 голос
/ 24 ноября 2009

Вот мое предположение за 5 минут ... Стек вызовов, который вы видите, - это то, что вы получаете, когда .Net не знает, как сериализовать / десериализовать члена класса GUI.

Попробуйте следующее:

[Browsable(false)]
ProtocolPanel ProtocolPanel {get {...} set {...} }

Если это все еще не работает, откройте resx для формы и нажмите на выпадающий список «Strings» (тип). Нажмите «Другое» и посмотрите, есть ли здесь какие-либо двоичные данные сериализации, относящиеся к ProtocolPanel. Если это так, удалите их.

1 голос
/ 08 мая 2009

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

ProtocolPanel myProtocolPanel = new AutoTestProtocols.Interface.ControlPanel();

Затем вы можете просто изменить все эти вызовы на «This.ProtocolPanel» на «myProtocolPanel».

0 голосов
/ 10 апреля 2013

У меня была такая же ошибка и я открыл файл * .resx. Строки содержат переменную String1 без значения. Я удалил это, и оно вызвало сохранение и исправило проблему (с помощью Visual Studio 2010)

  1. В Solution Explorer разверните оскорбительную форму
  2. Дважды щелкните файл * .resx
  3. Выберите строки из выпадающего списка
  4. Щелкните правой кнопкой мыши String1 и выберите Удалить
  5. ОК, чтобы сохранить, затем закройте * .resx и снова откройте форму
0 голосов
/ 19 августа 2010

Полагаю, у меня была похожая проблема:
Ваш класс ProtocolPanel делает что-то в своем конструкторе, который не работает во время разработки . Например, вы читаете файл настроек, которого там нет, и это вызывает исключение? Или вы активно сериализуете то, что не сериализуемо?

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

if (DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{               
    return;   //in design mode do not initialize anything (accessing the model here may cause troubles)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...