- PR -

TextChanged eventが発生しない

1
投稿者投稿内容
AUST
会議室デビュー日: 2005/11/11
投稿数: 11
投稿日時: 2006-01-12 16:29
ウェブコントロールのテキストボックスが画面上にありまして、OKボタンをクリックした際に、その値を取得する必要があります。

まず、プログラムからあらかじめデフォルト値をテキストボックスへ設定しておきます。
その後、ユーザがテキストボックスの値を変更して、OKボタンをクリックした際、TextChangedイベントが発生しない事象が発覚しています。
なお、プログラムからデフォルト値をセットしない場合には、正常にTextChangedイベントが発生します。

このコントロールは、日付データを扱うもので、子コントロールを呼び出してFrom、Toの2つのテキストボックスを用意し、範囲指定ができるようになっています。

実際には、From, Toの値をセットする際に、下記のようにEnsureChildControls()をコールしてそれぞれにデフォルト値Value()をセットします。
Set(ByVal Value() As String)
EnsureChildControls()
objDateFromCtl.Value = Value(0)
objDateToCtl.Value = Value(1)
End Set
この際、EnsureChildControls()以下3行をコメントアウトしますと、正常にTextChangedイベントが発生するのです。この辺が何かいけないのでしょうか?

よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-01-21 21:42
 この中にブレークポイントを置いて、意図しないタイミングで呼び出されていないか、チェックしてください。
 「表示」メニューの中に「呼び出し履歴」があると思います(環境がないため未確認)。それを出して、止まったときにどこから呼び出されているか、確認してください。


 ウェブの場合、GET や POST の要求があると、初期化をして、ビューステートを読み込んで、ポストを読み込んで、Load イベントが走って、その後にイベント処理が行われます。Load イベントで初期値に設定していると、変更系のイベントが発生しません。
________________________________
□ Posted by Jitta on 2006/01/21
_________________
AUST
会議室デビュー日: 2005/11/11
投稿数: 11
投稿日時: 2006-01-23 09:18
ご丁寧な回答ありがとうございます。
早速、調べてみます。
AUST
会議室デビュー日: 2005/11/11
投稿数: 11
投稿日時: 2006-01-23 17:05
Jitta様

アドバイスいただいた内容を確認してみました。

Jitta様ご指摘のように、ポストバックした際に以下のように動いています。

1.初期化 (Init)
2.ビューステートの読み込み (LoadViewState)
3.読み込み (Load)
4.TextChanged Event発生

この際、”3.読み込み (Load)”時には、特に初期化処理は行っていないことを確認しました。
なお、ポストバックデータの処理は行っておりません。

となりまして、また深い闇へ包まれてしまいました、、、

EnsureChildControls()をコメントアウトしますと、問題なくTextChangedEventが発生しますので、どうもここが怪しいと思っています。
EnsureChildControls()関連で何かアドバイスはございますでしょうか?


(参照)
「.NET Framework 開発者ガイド−コントロール実行の有効期間」
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconControlExecutionLifecycle.asp
1

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