Framework1.1 VB.netにて、ウェブアプリケーションを開発しています。
CalendarコントロールのSelectedDateで取得した日付が1つ遅れてしまいます。
原因は、Page_Loadの時点では、まだ選択されていないようでPage_PreRenderにSelectedDateと書くと、選択した日付が取得できます。
Page_PreRenderに記述する以外に対策は無いのでしょうか?
CalendarのSelectionChangedで取得するのではだめなんですね。
その後確かめたら全く問題は無さそうです。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
Calendar1.SelectedDate = Now()
End If
End Sub
Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Calendar1.SelectionChanged
TextBox1.Text = Calendar1.SelectedDate
End Sub
表示の為のTextBoxは追加してありますが。
Calendar.SelectedDateの値に基づいて作成したオブジェクトに対して、動的イベントを設定しているので、どうしてもPage_Loadの時点でCalendarコントロールの変更後の日付を取得したいのですが、このような考え方その物が間違っているのでしょうか。
呼び出される順序が以下のようになっていました。
Page_Load
↓
Calendar1_SelectionChanged
↓
Page_PreLoad
動的にイベントハンドラを設定した場合、Page_Loadの直後にその結びつけが行われるようで、困って居ます。
うーむ、可能なのかな?
カレンダーの日がクリックされるとポストバックが発生して、ページのリロードが行われ、
Page_Loadが行われた後、CalendarのSelectイベントが発生しますからね。
バッチイ(^^; プログラムとしては、Calendar1_SelectionChangedで再びPage_Loadを発生させる
手は有りますが。
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Text = Calendar1.SelectedDate.ToString
End Sub
Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Calendar1.SelectionChanged
Page_Load(sender, e)
End Sub
こんなコード書いてると怒られそうだな。。。。
そうなんですよね・・・。
とりあえず現状、Page_LoadをCalendar_SelectionChanged内で再度呼び出して、なんとか動いています。(悲)
やはり、Windows.Formのイベントハンドラの様にはいかないものですね・・・。
とりあえず解決としておきます。
また、解決策がありましたらよろしくお願いします。
ツイート | ![]() |