'宣言 Protected Overridable Sub OnBeforeSelectedAppointmentsChange( _ ByVal e As BeforeSelectedAppointmentsEventArgs _ )
protected virtual void OnBeforeSelectedAppointmentsChange( BeforeSelectedAppointmentsEventArgs e )
イベントが発生すると、デリゲートを通じてイベント ハンドラーが呼び出されます。
OnBeforeSelectedAppointmentsChange メソッドを使用すれば、デリゲートをアタッチせずに派生クラスでイベントを処理できます。これは、派生クラスでイベントを処理する際によく用いられる手法です。
継承時の注意: 派生クラスで OnBeforeSelectedAppointmentsChange をオーバーライドする場合は、登録されたデリゲートがイベントを受信できるようにするため、必ず基本クラスの OnBeforeSelectedAppointmentsChange メソッドを呼び出してください。
Imports Infragistics.Shared Imports Infragistics.Win Imports Infragistics.Win.UltraWinSchedule Imports System.Diagnostics Private Sub ultraCalendarInfo1_BeforeSelectedAppointmentsChange(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinSchedule.BeforeSelectedAppointmentsEventArgs) Handles ultraCalendarInfo1.BeforeSelectedAppointmentsChange '---------------------------------------------------------------------------------------------------- ' 説明 ' BeforeSelectedAppointmentsChange ' ' 1 つ以上の Appointment が選択または選択解除される前に発生します ' '---------------------------------------------------------------------------------------------------- ' NewSelectedAppointments コレクションのカウントが既存の ' SelectedAppointments コレクションのカウントより大きい場合、 ' 新しい予定が選択されます Dim info As String = String.Empty If (e.NewSelectedAppointments.Count > Me.ultraCalendarInfo1.SelectedAppointments.Count) Then info += "The following appointments have been added to the selection:" + vbCrLf + vbCrLf If (Me.ultraCalendarInfo1.SelectedAppointments.Count > 0) Then ' NewSelectedAppointments コレクションを繰り返し、 ' 各新しい選択についての情報を取得します Dim newAppointment As Appointment For Each newAppointment In e.NewSelectedAppointments ' 既存の選択された予定を繰り返し、コレクションに追加した ' 新しい予定を決定します Dim oldAppointment As Appointment For Each oldAppointment In Me.ultraCalendarInfo1.SelectedAppointments If (newAppointment Is oldAppointment) Then Exit For Else ' 既存の予定が SelectedAppointments コレクションに存在する場合、 ' ユーザーの新しい予定ではないため、新しい予定として表示しません info += newAppointment.Subject + " (" info += newAppointment.StartDateTime.ToLongDateString() + ")" + vbCrLf End If Next Next Else ' SelectedAppointments コレクションのカウントは 0 の場合、 ' 既に存在していることを確認する必要がないため、すべてを表示します Dim newAppointment As Appointment For Each newAppointment In e.NewSelectedAppointments ' 既存の予定が SelectedAppointments コレクションに存在する場合、 ' NewSelectedAppointments コレクションにない場合、選択解除されました info += newAppointment.Subject + " (" info += newAppointment.StartDateTime.ToLongDateString() + ")" + vbCrLf Next End If ElseIf (e.NewSelectedAppointments.Count > 0) Then ' そうでない場合、既存の予定を選択解除されました info += "The following appointments have been removed from the selection:" + vbCrLf + vbCrLf ' 既存の SelectedAppointments コレクションを繰り返し、 ' 各の選択解除されている予定についての情報を取得します Dim oldAppointment As Appointment For Each oldAppointment In Me.ultraCalendarInfo1.SelectedAppointments ' 既存の選択された予定を繰り返し、コレクションに追加した ' 新しい予定を決定します Dim newAppointment As Appointment For Each newAppointment In e.NewSelectedAppointments If (newAppointment Is oldAppointment) Then Exit For Else ' 既存の予定が SelectedAppointments コレクションに存在する場合、 ' NewSelectedAppointments コレクションにない場合、選択解除されました info += oldAppointment.Subject + " (" info += oldAppointment.StartDateTime.ToLongDateString() + ")" + vbCrLf End If Next Next Else ' 選択がクリアされました info += "The SelectedAppointments collection is about to be cleared." + vbCrLf info += vbCrLf + vbCrLf + "Continue?" ' エンド ユーザーに MessageBox を表示し、続行するかどうかを確認します Dim result As DialogResult = MessageBox.Show(info, "BeforeSelectedAppointmentsChange", MessageBoxButtons.YesNo) ' 続行しない場合、イベントをキャンセルします If (result = DialogResult.No) Then e.Cancel = True End If End Sub
using System.Diagnostics; using Infragistics.Shared; using Infragistics.Win; using Infragistics.Win.UltraWinSchedule; private void ultraCalendarInfo1_BeforeSelectedAppointmentsChange(object sender, Infragistics.Win.UltraWinSchedule.BeforeSelectedAppointmentsEventArgs e) { //---------------------------------------------------------------------------------------------------- // 説明 // BeforeSelectedAppointmentsChange // // 1 つ以上の Appointment が選択または選択解除される前に発生します // //---------------------------------------------------------------------------------------------------- // NewSelectedAppointments コレクションのカウントが既存の // SelectedAppointments コレクションのカウントより大きいの場合、 // 新しい予定が選択されました string info = string.Empty; if ( e.NewSelectedAppointments.Count > this.ultraCalendarInfo1.SelectedAppointments.Count ) { info += "The following appointments have been added to the selection:" + "\n\n"; if ( this.ultraCalendarInfo1.SelectedAppointments.Count > 0 ) { // NewSelectedAppointments コレクションを繰り返し、 // 各の新しい選択についての情報を取得します foreach( Appointment newAppointment in e.NewSelectedAppointments ) { // 既存の選択された予定を繰り返し、コレクションに追加した // 新しい予定を決定します foreach( Appointment oldAppointment in this.ultraCalendarInfo1.SelectedAppointments ) { if ( newAppointment == oldAppointment ) break; else { // 既存の予定が SelectedAppointments コレクションに存在する場合、 // ユーザーによって新しい予定ではないため、新しい予定として表示しません info += newAppointment.Subject + " ("; info += newAppointment.StartDateTime.ToLongDateString() + ")" + "\n"; } } } } else { // SelectedAppointments コレクションのカウントは 0 の場合、 // 既に存在していることを確認する必要がないため、すべてを表示します foreach( Appointment newAppointment in e.NewSelectedAppointments ) { // 既存の予定が SelectedAppointments コレクションに存在する場合、 // NewSelectedAppointments コレクションにない場合、選択解除されました info += newAppointment.Subject + " ("; info += newAppointment.StartDateTime.ToLongDateString() + ")" + "\n"; } } } else if ( e.NewSelectedAppointments.Count > 0 ) { // そうでない場合、既存の予定を選択解除されました info += "The following appointments have been removed from the selection:" + "\n\n"; // 既存の SelectedAppointments コレクションを繰り返し、 // 各の選択解除されている予定についての情報を取得します foreach( Appointment oldAppointment in this.ultraCalendarInfo1.SelectedAppointments ) { // 既存の選択された予定を繰り返し、コレクションに追加した // 新しい予定を決定します foreach( Appointment newAppointment in e.NewSelectedAppointments ) { if ( newAppointment == oldAppointment ) break; else { // 既存の予定が SelectedAppointments コレクションに存在する場合、 // NewSelectedAppointments コレクションにない場合、選択解除されました info += oldAppointment.Subject + " ("; info += oldAppointment.StartDateTime.ToLongDateString() + ")" + "\n"; } } } } else { // 選択がクリアされました info += "The SelectedAppointments collection is about to be cleared." + "\n"; } info += "\n\n" + "Continue?"; // エンド ユーザーに MessageBox を表示し、続行するかどうかを確認します DialogResult result = MessageBox.Show( info, "BeforeSelectedAppointmentsChange", MessageBoxButtons.YesNo ); // 続行しない場合、イベントをキャンセルします if ( result == DialogResult.No ) e.Cancel = true; }