0

UserControlで苦労しています。Pagerを表すUserControlがあり、次のように公開されたPresenterオブジェクトプロパティがあります。

[Browsable(false)]
[DesignSerializationAttribute(DesignSerializationAttribute.Hidden)]    
public object Presenter { get; set; }

Visual Studioでこのプロパティを初期化せずに、コントロールをWindows Fromにドラッグアンドドロップできるため、コード自体は機能します。ここで、このコントロールのLoadイベントで、実行時にnullであるPresenterのメソッドを呼び出すため、次の追加コードを導入しました。

public override void OnLoad(...)
{
   if (this.DesignMode)
   {
      base.OnLoad(e);
      return;
   }
   presenter.OnViewReady();
}

これで、このUserControlを含むウィンドウを開くたびに、VisualStudioによってWindowsデザイナーコードが変更されます。したがって、開くとすぐに、VSはそれを保存するかどうかを尋ねます...そしてもちろん、ウィンドウにコントロールを追加すると、変更は保持されません...削除するとすぐにUserControl Pagerの問題は解消されます...適切な方法でこれに取り組むにはどうすればよいですか?プレゼンタープロパティは実行時に注入されるため、設計時に初期化されることは望ましくありません...

4

2 に答える 2

0

VSがデザイナーコードを生成しようとすると、おそらく例外が発生します。

VSの2番目のコピーをデザイナーに添付し、Break On Exceptionsをオンにして、何が起こっているかを確認します。

于 2010-12-21T13:55:27.903 に答える
0

したがって、例外は、UserControlを含むWindowsフォームのデザイナによってスローされます。

このエラーのインスタンス(1)

  1. Infrastructure.BaseModule.MYWindow.Designer.cs行:108列:1コールスタックを非表示

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 .Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager、String name、CodeExpression expression)at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager、CodeStatement statement)

于 2010-12-21T14:38:05.807 に答える