3

私はc#の初心者なので、愚かな質問をしたらすみません...

ここに私の問題があります:

  • 「TabPage」から継承するクラス「ProtocolTabPage」があります。
  • 「パネル」から継承する「コントロールパネル」があります。
  • ProtocolTabPage によってインスタンス化された ControlPanel があります。
  • 私のクラスは両方とも名前空間「AutoTestProtocols.Interface」にあります。

ProtocolTabPage[Design] に、次のエラーがあります。

「変数 'ProtocolPanel' は宣言されていないか、割り当てられていません。

System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error (IDesignerSerializationManager マネージャ、文字列 exceptionText、文字列 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

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 を開き、"Strings"(type) ドロップダウンをクリックします。[その他] をクリックし、ProtocolPanel に関連するバイナリ シリアル化データがそこにリストされているかどうかを確認します。その場合は、それらを削除してください。

于 2009-11-24T05:38:21.580 に答える
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 に答える