- PR -

[asp.net 2.0]デザイナ上でのカスタムコントロールについて

1
投稿者投稿内容
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2006-07-25 11:27
VB.NET 2005にて
System.Web.UI.WebControls.Labelを継承して
カスタムコントロールを作成しました。

動作は意図どおりにするのですが、
aspxのデザイナ上では
「コントロールの描画エラー」
が発生してしまいます。

System.Web.UI.Design.ControlDesignerを継承した
Friendクラスを使用すれば解決するというような記事を
見かけたのですが、何が悪いのか
描画エラーが発生したまま解決しません。

解決策をご存知の方、ご教授ください。

参考リンク
http://japan.internet.com/developer/20051108/26.html#support

たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2006-07-25 11:50
引用:

System.Web.UI.Design.ControlDesignerを継承した
Friendクラスを使用すれば解決するというような記事を
見かけたのですが、何が悪いのか
描画エラーが発生したまま解決しません。

参考リンク
http://japan.internet.com/developer/20051108/26.html#support


ご質問されている文からは、描画エラーが出ていることしかわかりません。

自作コントロールでは、描画のエラーがいろいろな条件でます。
というより、デザイン時対策を実装していないなら、出て当然です。
デザイン時にも自分が記述したコードが動いてしまうのですが、デザイン時には実行時と条件が異なるためにエラーになりやすいのです。

参考リンクに解決方法が結構書いてありますが、どこまでやりましたか?
問題が出ている最小限のコードを提示していただければ、なにか案を出すことができるかもしれません。



_________________
たつごろー
codeseek
こみゅぷらす
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2006-07-25 12:13
レスありがとうございます。

「エラー内容はハンドルされていない例外が発生しました。
オブジェクト参照がオブジェクトインスタンスに設定されていません。」
です。

コードを抜粋したものを乗せます。

コントロール自体はVS.NETではなくテキストエディタで記述し
コマンドラインから以下のコマンドでDLLを作成しています。
(VS.NETを使用してDLLを作成すると他のプロジェクトで参照設定してもなぜか参照できないため。)
コード:
vbc /t:library /out:hogeCustomControl hogeLabel.vb



よろしくお願いします。
コード:

Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Resources
Imports System.Threading
Imports System.Globalization
Imports System.ComponentModel

Namespace hogehgoe
<Designer(GetType(hogeLabel.hogeLabelControlDesigner))> _
Public Class hogeLabel : Inherits System.Web.UI.WebControls.Label

(中略)

Protected Overrides Sub Render(ByVal Out As HtmlTextWriter)
       ・
      (中略)
       ・
End Sub

Friend Class hogeLabelControlDesigner
Inherits System.Web.UI.Design.ControlDesigner

Protected il as hogeLabel

Public Overrides Sub Initialize(ByVal component as IComponent)

If(TypeOf component Is hogeLabel) Then

MyBase.Initialize (component)
il = CType(component, hogeLabel)

End If
End Sub
End Class
End Class
End Namespace



[ メッセージ編集済み 編集者: JBOY 編集日時 2006-07-25 12:19 ]

[ メッセージ編集済み 編集者: JBOY 編集日時 2006-07-25 19:15 ]
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2006-07-25 19:01
引用:

(VS.NETを使用してDLLを作成すると他のプロジェクトで参照設定してもなぜか参照できないため。)



なぜだろう。
この原因を解明しておかないと手間ですね。

引用:

コード:
	       If(TypeOf component Is InternationalLabel) Then




聞いている型が違うようですよ。
これだと「il」がからっぽのままになってしまって、
引用:

「エラー内容はハンドルされていない例外が発生しました。
オブジェクト参照がオブジェクトインスタンスに設定されていません。」


というメッセージになります。

_________________
たつごろー
codeseek
こみゅぷらす
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2006-07-25 19:13
コード:
If(TypeOf component Is hogeLabel) Then



の間違いでした。
転記ミスでした。載せる際にクラス名を変更し忘れてました。


引用:
なぜだろう。
この原因を解明しておかないと手間ですね。


確かにそうなんですが、デザイナの問題の方が大事なので
この件はあとで対応しようと思っています。

[ メッセージ編集済み 編集者: JBOY 編集日時 2006-07-25 19:15 ]
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2006-07-25 19:18
引用:

JBOYさんの書き込み (2006-07-25 19:13) より:
コード:
If(TypeOf component Is hogeLabel) Then


の間違いでした。
転記ミスでした。載せる際にクラス名を変更し忘れてました。



ということは、まだ解決していないということですね。
Designerのデバッグは通常のデバッグのための機能が使えないことが多くてちょっと手間ですよね。

まずは、GetDesignTimeHtmlメソッドをデフォルトの状態にして、問題なく表示するかを確認し、次に、少しずつコードを復活させてみてください。
問題が起こっている場所を見つけることができるはずです。


_________________
たつごろー
codeseek
こみゅぷらす
JBOY
ベテラン
会議室デビュー日: 2003/02/27
投稿数: 72
投稿日時: 2006-07-27 21:12
返信が遅れてすいませんでした。
出張の為見ることができませんでした。

1日ちょっと日が開いてコードを改めてみてみると、
Renderの中でファイルを読み込む処理が入っていて
そこをTry 〜 Catchで囲んで見たところ
エラー処理をちょろっと入れた所、
エラーにならずに表示できました。

デザイン時はファイルを読めないということなのでしょうか?

疑問は残りますが、ひとまずありがとうございました。
時間を見つけて調査したいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)