3

我是 C# 的新手,所以如果我问一些愚蠢的问题,请原谅...

这是我的问题:

  • 我有一个继承自“TabPage”的类“ProtocolTabPage”。
  • 我有一个从“面板”继承的“控制面板”。
  • 我有一个由我的 ProtocolTabPage 实例化的 ControlPanel。
  • 我的两个类都在命名空间“AutoTestProtocols.Interface”中。

在 ProtocolTabPage[Design] 中,我有以下错误:

“变量‘ProtocolPanel’要么未声明,要么从未赋值。

在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager 管理器,CodeStatement 语句)处的 .Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager 管理器,字符串名称,CodeExpression 表达式)"

虽然,在我的 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

4 回答 4

1

乍一看,您似乎在尝试使用类型名称作为变量名称,通常应该避免这种情况。在您的 ProtocolPanel 实例化中,尝试:

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

然后,您可以将所有对“This.ProtocolPanel”的调用更改为“myProtocolPanel”。

于 2009-05-08T14:53:49.633 回答
1

这是我在 5 分钟内的猜测......您看到的调用堆栈是当 .Net 不知道如何序列化/反序列化 gui 类的成员时得到的。

尝试以下操作:

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

如果它仍然不起作用,请打开表单的 resx 并单击“字符串”(类型)下拉菜单。点击“Other”,看看里面是否列出了与ProtocolPanel相关的二进制序列化数据。如果是这样,请删除它们。

于 2009-11-24T05:38:21.580 回答
0

我遇到了同样的错误并打开了 *.resx 文件。字符串包含没有值的 String1 变量。我删除了它,它强制保存并修复了问题(使用 Visual Studio 2010)

  1. 在解决方案资源管理器中展开违规表单
  2. 双击 *.resx 文件
  3. 从下拉列表中选择字符串
  4. 右键单击 String1 并选择删除
  5. 确定保存然后关闭 *.resx 并重新打开表单
于 2013-04-10T08:32:19.890 回答
0

我的猜测,因为我遇到了类似的问题:
您的 ProtocolPanel 类在它的构造函数中做了一些事情,这在设计时不起作用。例如,您正在读取一个不存在的设置文件,这会引发异常?或者你主动序列化一些不可序列化的东西?

在我的构造函数中,有访问模型的初始化代码,该代码在设计时不存在。我在构造函数路径中引入了以下代码,这有帮助:

if (DesignMode || LicenseManager.UsageMode == LicenseUsageMode.Designtime)
{               
    return;   //in design mode do not initialize anything (accessing the model here may cause troubles)
}
于 2010-08-19T08:35:20.713 回答