- PR -

AJAX Control Toolkit の使用について

投稿者投稿内容
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 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 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-11-08 10:12
やったことはないんですが、このコーディングだと Extender を作っているけれど Container に登録(追加)してないですよね。

Me.Controls か Me.Parent.Controls あたりに追加したらどうなりますか?
で、追加するとしたら Render ではなくて Init あたりでやらないと怒られたような。
_________________
かるあ のメモスニペット
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-11-08 10:36
いつもお世話になっております。
さっそくのご返信ありがとうございます。

引用:

かるあさんの書き込み (2007-11-08 10:12) より:

Container に登録(追加)してないですよね。

Me.Controls か Me.Parent.Controls あたりに追加したらどうなりますか?
で、追加するとしたら Render ではなくて Init あたりでやらないと怒られたような。




かるあ様に指摘された上記の点を修正した結果上手く動作することが出来ました。


ただ、現在作成中のフレームワーク上(共通部品)では、エラーが出て上手く動作しませんでした。。。
おそらく、現在開発中のフレームワーク(共通部品)が何か悪さをしているのかと・・・。その部分は引き続き調査を実施したいと思います。


.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-11-08 13:54
いつもお世話になっております。

引用:


かるあさんの書き込み (2007-11-08 10:12) より:

Container に登録(追加)してないですよね。

Me.Controls か Me.Parent.Controls あたりに追加したらどうなりますか?
で、追加するとしたら Render ではなくて Init あたりでやらないと怒られたような。




「上手く動作することが出来ました。」と掲載させていただきましたが、
自分の望むような動きではありませんでした。。。


引用:


本来の使い方?で「AJAX Control Toolkit」の「FilteredTextBox」を使うには
Webフォーム上に入力制限を行う対象となるテキストボックス1つにつき、FilteredTextBoxExtenderを1つ貼り付け「TargetControlID」を対象テキストボックスのIDに設定することで出来ると思います。




今回、上記のような事を派生コントロールクラス内のみで行いたかったのですが、
どうしても、FilteredTextBoxExtenderオブジェクトを派生コントロールが張り付いているページにAddする時にエラーとなってしまいます。
(※派生コントロール側の、Initイベントに記載してもだめでした。。。)

※Addする際のコード
「Me.Page.Master.FindControl("form1").Controls.Add(cFilteredTextBoxExtender)」

例外の内容は「コントロール コレクションは DataBind、Init、Load、PreRender、Unload 段階で変更することはできません。」です。

張り付いているページにAddするには、ページ側のイベントで処理をしないと
不可能なものなのでしょうか?

何度も申し訳ありませんが、よろしくお願いいたします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-11-08 17:22
うーん、やりたいことがいまいちわからないです。
引用:

.netさんの書き込み (2007-11-08 13:54) より:

今回、上記のような事を派生コントロールクラス内のみで行いたかったのですが、


FilteredTextBoxExtender を適用したカスタム TextBox を作りたいということではない??
引用:

どうしても、FilteredTextBoxExtenderオブジェクトを派生コントロールが張り付いているページにAddする時にエラーとなってしまいます。
(※派生コントロール側の、Initイベントに記載してもだめでした。。。)

※Addする際のコード
「Me.Page.Master.FindControl("form1").Controls.Add(cFilteredTextBoxExtender)」


これはどのクラスのコードで何のイベントで、どこに Extender を追加しようとしていますか?

引用:

張り付いているページにAddするには、ページ側のイベントで処理をしないと
不可能なものなのでしょうか?


追加先は Me.Parent.Control ではない?
_________________
かるあ のメモスニペット
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2007-11-09 09:15
何度も申し訳ありません。。。
ありがとうございます。

引用:

かるあさんの書き込み (2007-11-08 17:22) より:
うーん、やりたいことがいまいちわからないです。
引用:

.netさんの書き込み (2007-11-08 13:54) より:

今回、上記のような事を派生コントロールクラス内のみで行いたかったのですが、


FilteredTextBoxExtender を適用したカスタム TextBox を作りたいということではない??



やりたい事はかるあさんのご指摘の通りです。


引用:

かるあさんの書き込み (2007-11-08 17:22) より:
引用:

どうしても、FilteredTextBoxExtenderオブジェクトを派生コントロールが張り付いているページにAddする時にエラーとなってしまいます。
(※派生コントロール側の、Initイベントに記載してもだめでした。。。)

※Addする際のコード
「Me.Page.Master.FindControl("form1").Controls.Add(cFilteredTextBoxExtender)」


これはどのクラスのコードで何のイベントで、どこに Extender を追加しようとしていますか?


カスタムコントロール側のInitイベント時です。

引用:

かるあさんの書き込み (2007-11-08 17:22) より:
引用:

張り付いているページにAddするには、ページ側のイベントで処理をしないと
不可能なものなのでしょうか?


追加先は Me.Parent.Control ではない?


カスタムコントロール側のInitイベントで、追加先を「Me.Parent.Control」としても、「コントロール コレクションは DataBind、Init、Load、PreRender、Unload 段階で変更することはできません。」といった例外が発生してしまいます。

※尚、追加先のページはマスタページを使用しているので「Me.Parent.Control」は
「ContentPlaceHolder」となっております。

何度も申し訳ありませんが、よろしくお願いいたします。
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 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
----------------------------------------------------------------------------

何か違いがあるのでしょうか?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-11-09 10:53
引用:

.netさんの書き込み (2007-11-09 09:15) より:

カスタムコントロール側のInitイベントで、追加先を「Me.Parent.Control」としても、「コントロール コレクションは DataBind、Init、Load、PreRender、Unload 段階で変更することはできません。」といった例外が発生してしまいます。

※尚、追加先のページはマスタページを使用しているので「Me.Parent.Control」は
「ContentPlaceHolder」となっております。


あっほんとだ、すみません(汗
僕が試した時はボタンのクリック時に動的にカスタムコントロールを作ってたのでおきなかったみたいですね。

作った Extender をどうにかして 子コントロールを持てるオブジェクトに追加してあげる必要があるのは確かなので、TextBox が Container に追加されるときに一緒に差し込んであげることになると思うけれど。。。ちょっと調べないとわからないです(汗

# これ本当は Container 系の Control を拡張するのが正しいのかも知れませんね。
# Panel を継承して TextBox と Extender を子供に持つとか。
_________________
かるあ のメモスニペット

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