- - PR -
AJAX Control Toolkit の使用について
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-07 14:36
いつもお世話になっております。
現在、「VS 2005 Pro」及び、「AJAX Control Toolkit」を使用して Webアプリケーションの開発を行う準備をしております。 さっそくのご質問なのですが、 現在開発準備を行っている上で、 数値のみの入力を許可する派生テキストボックスの作成を試みております。 (※System.Web.UI.WebControls.TextBoxを継承しています。) 上記を実現する上で「AJAX Control Toolkit」のFilteredTextBoxExtenderを 使用し、実現が出来ないものかと思っております。 本来の使い方?で「AJAX Control Toolkit」の「FilteredTextBox」を使うには Webフォーム上に入力制限を行う対象となるテキストボックス1つにつき、FilteredTextBoxExtenderを1つ貼り付け「TargetControlID」を対象テキストボックスのIDに設定することで出来ると思います。 上記の手順を派生コントロールクラス内で一括して出来ないかと思いまして 質問させていただきました。 下記のような方法で、いろいろ試みてはいるのですが、なかなか上手く動作してくれません。。。 以下はお試しコードです。 不足している点があるのでしょうか? -------------------------------------------------------------- Public Class BaseFieldNumber Inherits System.Web.UI.WebControls.TextBox Private cFilteredTextBoxExtender As AjaxControlToolkit.FilteredTextBoxExtender Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) cFilteredTextBoxExtender = New AjaxControlToolkit.FilteredTextBoxExtender cFilteredTextBoxExtender .TargetControlID = Me.ID cFilteredTextBoxExtender .FilterType = AjaxControlToolkit.FilterTypes.Numbers MyBase.Render(writer) End Sub End Class -------------------------------------------------------------- こうすれば、出来たまたは、実現は無理等ご教授よろしくお願いいたします。 [ メッセージ編集済み 編集者: .net 編集日時 2007-11-07 14:38 ] [ メッセージ編集済み 編集者: .net 編集日時 2007-11-07 14:38 ] | ||||||||||||||||||||||||
|
投稿日時: 2007-11-08 10:12
やったことはないんですが、このコーディングだと Extender を作っているけれど Container に登録(追加)してないですよね。
Me.Controls か Me.Parent.Controls あたりに追加したらどうなりますか? で、追加するとしたら Render ではなくて Init あたりでやらないと怒られたような。 _________________ かるあ のメモ と スニペット | ||||||||||||||||||||||||
|
投稿日時: 2007-11-08 10:36
いつもお世話になっております。
さっそくのご返信ありがとうございます。
かるあ様に指摘された上記の点を修正した結果上手く動作することが出来ました。 ただ、現在作成中のフレームワーク上(共通部品)では、エラーが出て上手く動作しませんでした。。。 おそらく、現在開発中のフレームワーク(共通部品)が何か悪さをしているのかと・・・。その部分は引き続き調査を実施したいと思います。 | ||||||||||||||||||||||||
|
投稿日時: 2007-11-08 13:54
いつもお世話になっております。
「上手く動作することが出来ました。」と掲載させていただきましたが、 自分の望むような動きではありませんでした。。。
今回、上記のような事を派生コントロールクラス内のみで行いたかったのですが、 どうしても、FilteredTextBoxExtenderオブジェクトを派生コントロールが張り付いているページにAddする時にエラーとなってしまいます。 (※派生コントロール側の、Initイベントに記載してもだめでした。。。) ※Addする際のコード 「Me.Page.Master.FindControl("form1").Controls.Add(cFilteredTextBoxExtender)」 例外の内容は「コントロール コレクションは DataBind、Init、Load、PreRender、Unload 段階で変更することはできません。」です。 張り付いているページにAddするには、ページ側のイベントで処理をしないと 不可能なものなのでしょうか? 何度も申し訳ありませんが、よろしくお願いいたします。 | ||||||||||||||||||||||||
|
投稿日時: 2007-11-08 17:22
うーん、やりたいことがいまいちわからないです。
FilteredTextBoxExtender を適用したカスタム TextBox を作りたいということではない??
これはどのクラスのコードで何のイベントで、どこに Extender を追加しようとしていますか?
追加先は Me.Parent.Control ではない? _________________ かるあ のメモ と スニペット | ||||||||||||||||||||||||
|
投稿日時: 2007-11-09 09:15
何度も申し訳ありません。。。
ありがとうございます。
やりたい事はかるあさんのご指摘の通りです。
カスタムコントロール側のInitイベント時です。
カスタムコントロール側のInitイベントで、追加先を「Me.Parent.Control」としても、「コントロール コレクションは DataBind、Init、Load、PreRender、Unload 段階で変更することはできません。」といった例外が発生してしまいます。 ※尚、追加先のページはマスタページを使用しているので「Me.Parent.Control」は 「ContentPlaceHolder」となっております。 何度も申し訳ありませんが、よろしくお願いいたします。 | ||||||||||||||||||||||||
|
投稿日時: 2007-11-09 10:40
いつもお世話になっております。
新たに不思議な現象が発生いたしましたので、ご報告いたします。 現在作成したカスタムコントロールクラスをDLLにし、使用する側のプロジェクトで参照しているのですが、作成したカスタムコントロールをWebフォームデザイナ上でドラッグ&ドロップでWebフォームに貼り付けて使用しようとした場合、デバッグ時にカスタムコントロール側で「コントロール コレクションは DataBind、Init、Load、PreRender、Unload 段階で変更することはできません。」といった例外が発生するのですが、 デザイナで貼り付けを行うのではなく、貼り付けを行いたいWebフォームのLoadイベント時に下記のように動的にコントロールを作成した場合、上記の例外は出なくなり、正常に動作いたしました。 ---------------------------------------------------------------------------- Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '↓↓↓カスタムコントロール↓↓↓ Dim wButton As New BaseControl1 wButton.ID = "BaseControl1" Me.FindControl("form1").Controls.Add(wButton) End Sub ---------------------------------------------------------------------------- 何か違いがあるのでしょうか? | ||||||||||||||||||||||||
|
投稿日時: 2007-11-09 10:53
あっほんとだ、すみません(汗 僕が試した時はボタンのクリック時に動的にカスタムコントロールを作ってたのでおきなかったみたいですね。 作った Extender をどうにかして 子コントロールを持てるオブジェクトに追加してあげる必要があるのは確かなので、TextBox が Container に追加されるときに一緒に差し込んであげることになると思うけれど。。。ちょっと調べないとわからないです(汗 # これ本当は Container 系の Control を拡張するのが正しいのかも知れませんね。 # Panel を継承して TextBox と Extender を子供に持つとか。 _________________ かるあ のメモ と スニペット |