3

カスタム コントロールがあり、正常に動作しますが、デザイン タイムにコントロールをレンダリングできません。(私はVS 2008を使用しています)

カスタム コントロールを開発している多くの人がこの問題に遭遇していると思います...エラーは「コントロールの作成エラー - CustomControlName」です オブジェクト参照がオブジェクトのインスタンスに設定されていません。

回避策が必要です。または少なくともこれをデバッグします...(これは設計時の問題なので、デバッグする方法は?)

OnInit、OnPreRender、RenderContents、CreateChildControls メソッドで if( !DesignMode) コードを試しました (暗闇で撮影しているだけです)...

助けてください。これが VS のバグでないことを心から願っています。

4

4 に答える 4

1

BFreeのコメントが最も可能性の高い問題です。コントロールをデザインビューに表示するには、デザインビューアが通常どのようにコントロールをインスタンス化するかわからないため、パラメータなしのコンストラクタが必要です。

パラメーターのないコンストラクターがある場合、何が起こっているかを示すためにコードを貼り付けることができますか?

于 2008-12-19T05:48:28.157 に答える
0

グレンが述べたように、最初の問題はパラメーターのないコンストラクターではあり得ません。

2つ目は、OnLoad中にメソッドを呼び出している場合や、パラメーターが初期化されていない他のメソッドを呼び出している場合や、通常は実行時に行われるデータベース呼び出しなどの試行である場合があります。

最近このバグを修正して*、私が気付いていない限り、DesignModeプロパティはネストされたコントロールの第1レベルと第2レベルで機能しますが、それを超えると通常は正しく機能しません。(別のUserControl[2]を保持するUserControl[1]を含むフォームなど、DesignModeはフォームと[1]で機能しますが、[2]では機能しません)。

また、Glennに同意するには、コードの一部を確認すると役立ちます。

*ネストされたユーザーコントロールを使用した最近の経験から、修正されていません。

于 2008-12-19T06:28:10.887 に答える
0

OnPreRenderCreateChildControlsメソッドでは、this.Pageを呼び出しています。あなたはそれらをで包んでみたくなるかもしれません

if (this.Page != null)
{
.....
}

その時点でPageオブジェクトはないと思うので、デザインビューで呼び出されると確信しています。私はしばらくの間カスタムサーバーコントロールを作成していなかったので、間違っている可能性があります(最近MVCで作業しています)。PreRenderCreateChildControls

于 2008-12-24T00:46:31.223 に答える
0

Glenn さん、このエラーは VS のバグであり、修正はまだリリースされていません。

于 2009-06-30T12:46:34.040 に答える