- PR -

Web複合コントロール・デザイン時の表示が[クラス名 コントロール名]になってしまう

1
投稿者投稿内容
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2004-01-21 12:07
こんにちは。
asp.netの開発をしてまして、カスタム(複合)コントロールを作っています。

 以前は、@RenderをオーバーライドしてHTMLをゴリゴリ書いていました。しかし、このやり方だと機能が膨らむにつれてコーディング量が非常に増えてしまいました。そこで、ACreateChildControlsをオーバーライドして子サーバコントロールを追加する方法に変更しました。そこで、問題が発生しました。

@のやり方…デザイン時にフォームに配置した時、実行時と同じ見た目で表示される。また、デザイン時にプロパティ変更しても即時反映される。
Aのやり方…デザイン時にフォームに配置した時、”[クラス名 コントロール名]”とだけ表示される。ただし、実行時は正しく表示される。

Aのやり方でも、デザイン時にフォームに配置した時に実行時と同じ見た目で表示されて欲しいのです。子コントロールの数が多すぎたか?と考えてテキストボックス2つだけのサンプルを作ってみましたが、ダメでした。以下にそのコードを記します。

Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.WebControls

<DefaultProperty("Text"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")> Public Class WebCustomControl1
Inherits System.Web.UI.Control
Implements INamingContainer

Dim _text As String

<Bindable(True), Category("Appearance"), DefaultValue("")> _
Property [Text]() As String
Get
Return _text
End Get

Set(ByVal Value As String)
_text = Value
End Set
End Property

Protected Overrides Sub CreateChildControls()
Dim txt1 As New TextBox
txt1.Text = [Text]
Controls.Add(txt1)

Dim txt2 As New TextBox
txt1.Text = [Text]
Controls.Add(txt1)
End Sub
End Class

長々と申し訳ありません。あくまでデザイン時だけのことなので、解決しなくてもいいといえばいいのですが・・・

お心当たりがありましたら、どうぞよろしくお願いします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-01-21 18:09
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbwlkwalkthroughcreatingcustomwebcontrols.asp
こちらが参考になるかもしれません。カスタムデザイナを作成してDesigner属性で
指定しなければいけないみたいです。
既存のDesigner(PanelDesignerとか)を継承とかしてなんとかならないですかねぇ・・
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2004-01-21 18:53
ベル様

紹介していただいたページを参考にしたら、できました!!
実はこのページにたどり着いてはいたんですが、もっと楽な方法はないものかと探し廻っているうちに忘れてました。

カスタムコントロールは面倒だからユーザーコントロールにしちゃおうかと悩んでいます。

とても助かりました。ありがとうございます。
1

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