バージョン

KeyActionMappings プロパティ (UltraWeekView)

Infragistics.Win.UltraWinSchedule.WeekView.UltraWeekViewAction とキーストロークを関連付ける Infragistics.Win.UltraWinSchedule.WeekView.KeyActionMapping オブジェクトのコレクション。
シンタックス
'宣言
 
Public ReadOnly Property KeyActionMappings As KeyActionMappings
public KeyActionMappings KeyActionMappings {get;}
解説

デフォルトで、KeyActionMappings コレクションは UltraWeekView コントロールに対するすべての標準的なキーボード マッピングを含みます。

Infragistics.Win.UltraWinSchedule.WeekView.KeyActionMapping オブジェクトをこのコレクションに個別に追加したり、このコレクションから個別に削除したりすることは可能ですが、これを行う際は注意が必要です。

KeyActionMappings コレクションを使用すると、UltraWeekView コントロールのキーボード処理機能をほとんど無制限に制御できます。

特定のキーストロークに対するデフォルトの動作が希望どおりのものでない場合は、カスタム Infragistics.Win.UltraWinSchedule.WeekView.KeyActionMapping で動作を置き換えることができます。

コントロールは、該当するキーストロークを受信するたびに KeyActionMappings コレクションにアクセスし、実行すべきアクションはあるか、ある場合はどのアクションを実行すればよいかを確認します。

次の例は、コントロールが KeyActionMappings テーブルに登録されたキーストロークを受信したときに発生する一連のイベントを説明しています。

例: コントロールの最初の表示日がアクティブな状態で、ユーザーが下矢印キーを押す。

  1. 下矢印キーが押された結果、コントロールの OnKeyDown メソッドが呼び出されます。
  2. 下矢印キーにマップされたアクションがあるかどうかを調べるために、KeyActionMappings テーブルが検索されます。
  3. アクションが見つかりました。このケースでは、NextDay アクションです。
  4. コントロールの CurrentState プロパティが照会され、コントロールが現在、キーストロークに対応する Infragistics.Win.UltraWinSchedule.WeekView.KeyActionMapping オブジェクトで定義された、"必要な状態"にあることが確認されます。
  5. コントロールの CurrentState プロパティも照会され、コントロールが現在、キーストロークに対応する Infragistics.Win.UltraWinSchedule.WeekView.KeyActionMapping オブジェクトで禁止された状態にないことが確認されます。
  6. キーストロークに対応する Infragistics.Win.UltraWinSchedule.WeekView.KeyActionMapping オブジェクトの必要条件または禁止条件に特殊キー ([Alt]、[Ctrl]、[Shift]) またはそれらの組み合わせが含まれる場合は、特殊キーの状態が、キーストロークに対応する Infragistics.Win.UltraWinSchedule.WeekView.KeyActionMapping オブジェクトに対して照合されます。
  7. 必要条件および禁止条件がすべて満たされている場合は、コントロールの PerformAction(UltraWeekViewAction,Boolean,Boolean) メソッドが呼び出されて、アクションが実行されます。

次の表は、UltraWeekView コントロールのデフォルトのキーマッピングをリストしたものです。

KeyCode ActionCode StateRequired StateDisallowed SpecialKeysRequired SpecialKeysDisallowed
Down NextDay Day, NextDayIsInMinMaxRange ActivityInEditMode Alt
Up PreviousDay Day, PreviousDayIsInMinMaxRange ActivityInEditMode Alt
DayToTheRight Day ActivityInEditMode Alt
DayToTheLeft Day ActivityInEditMode Alt
Home FirstDayInWeek Day DayFirst, ActivityInEditMode Alt
End LastDayInWeek Day ActivityInEditMode Alt
Prior ScrollUpByLargeChange Day ActivityInEditMode Alt
Next ScrollDownByLargeChange Day ActivityInEditMode Alt
Tab NextActivityByTab Day AltShift
Tab PreviousActivityByTab Day Shift Alt
Space ToggleDaySelection Day ActivityInEditMode Ctrl AltShift
F2 EnterEditMode Day ActivityInEditMode, ActivityIsLocked すべて
Esc ExitEditModeAndCancelChanges ActivityInEditMode すべて
Enter DisplayAppointmentDialog PivotItemIsActivity, SelectedAppointments, AutoAppointmentDialogEnabled ActivityInEditMode, PivotItemIsDay すべて
Enter ExitEditModeAndSaveChanges ActivityInEditMode NoteInEditMode すべて
Enter AddNewAppointment Day, NoSelectedActivities ActivityInEditMode すべて
削除 RemoveSelectedActivities PivotItemIsActivity ActivityInEditMode, PivotItemIsDay すべて

使用例
Imports Infragistics.Win
Imports Infragistics.Win.UltraWinSchedule
Imports Infragistics.Win.UltraWinSchedule.WeekView

    Private Sub CustomizeKeyActionMappings()

        '	新しい KeyActionMapping オブジェクトを作成し、コントロールの
        '	KeyActionMappings コレクションに追加します新しい KeyActionMapping オブジェクトで
        '	以下のプロパティを設定します:
        '
        '	KeyCode = F2
        '	ActionCode = ExitEditModeAndSaveChanges
        '	StateDisallowed = 0 (許可されていない状態なし)
        '	StateRequired = ActivityInEditMode
        '	SpecialKeysDisallowed = All (Alt、Ctrl、または Shift が押された場合、操作を無効にする)
        '	SpecialKeysRequired = 0 (操作を実行するために特別なキーを押す必要なし)
        '
        Dim keyToMap As Keys = Keys.F2

        Dim keyMappingToAdd As New KeyActionMapping(keyToMap, UltraWeekViewAction.ExitEditModeAndSaveChanges, 0, UltraWeekViewState.ActivityInEditMode, SpecialKeys.All, 0)

        '	コレクションに追加する前に、追加するかどうかを確認するために、
        '	KeyActionMapping プロパティを表示する MessageBox を表示します
        Dim msg As String = "The following KeyActionMapping will be added to the KeyActionMappings collection:" + vbCrLf + vbCrLf
        msg += "The keystoke the action will respond to is: " + keyMappingToAdd.KeyCode.ToString() + vbCrLf
        msg += "The action that will be performed when the key is pressed is: " + keyMappingToAdd.ActionCode.ToString() + vbCrLf
        msg += "The disallowed state for the action is (zero indicates no disallowed state): " + keyMappingToAdd.StateDisallowed.ToString() + vbCrLf
        msg += "The required state for the action is (zero indicates no required state): " + keyMappingToAdd.StateRequired.ToString() + vbCrLf
        msg += "The action will not be performed if any of the following special keys are pressed (zero indicates no special keys are disallowed): " + keyMappingToAdd.SpecialKeysDisallowed.ToString() + vbCrLf
        msg += "The action will only be performed if all of the following special keys are pressed (zero indicates no special keys are required): " + keyMappingToAdd.SpecialKeysRequired.ToString() + vbCrLf
        msg += vbCrLf + "Are you sure you want to add the custom KeyActionMapping?" + vbCrLf

        '	メッセージ ボックスを表示します
        Dim result As DialogResult = MessageBox.Show(msg, "Add KeyActionMapping", MessageBoxButtons.YesNo)

        '	ユーザーが [いいえ] を押すと、デフォルトの KeyActionMappings を変更せずに返します
        If result = DialogResult.No Then Return

        '	KeyActionMapping をコントロールの KeyActionMappings コレクションに追加する前に、そのキーストロークの既存のマッピングを削除するかどうかを確認します
        '			
        '	KeyActionMappings コレクションに繰り返し、特定のキーストロークの既存のマッピングの数を取得します
        '
        '	このコレクションを繰り返すときに、削除するかどうかを
        '	決定するため、ユーザーに表示するために、特定の
        '	キーストロークにマップした操作をリストする文字列を作成します
        Dim count As Integer = 0
        Dim mapList As String = String.Empty
        Dim keyMapping As KeyActionMapping
        For Each keyMapping In Me.ultraWeekView.KeyActionMappings
            If keyMapping.KeyCode = keyToMap Then
                count += 1
                mapList += keyMapping.ActionCode.ToString() + vbCrLf
            End If
        Next

        '	マップした操作がない場合、ユーザーにメッセージを表示する
        '	必要がないため、カスタム マッピングを追加して返します
        If count = 0 Then
            Me.ultraWeekView.KeyActionMappings.Add(keyMappingToAdd)
            '	テストするために予定を追加します
            Me.ultraWeekView.CalendarInfo.Appointments.Add(DateTime.Now, DateTime.Now.AddMinutes(30), "My Appointment")
            Return
        End If

        '	削除するかどうかを決定するために、ユーザーに既存のマッピングについて通知します
        msg = "The KeyActionMappings collection already contains the following mappings for " + keyToMap.ToString() + ":" + vbCrLf + vbCrLf
        msg += mapList + vbCrLf
        msg += "Do you want to remove the existing mappings for " + keyToMap.ToString() + "?"

        '	メッセージ ボックスを表示します
        result = MessageBox.Show(msg, "Remove existing KeyActionMappings", MessageBoxButtons.YesNo, MessageBoxIcon.Information)

        '	ユーザーは [いいえ] を押すと、既存の KeyActionMappings コレクションを変更せずに返します
        If result = DialogResult.No Then
            Me.ultraWeekView.KeyActionMappings.Add(keyMappingToAdd)
            '	テスト用に予定を追加します
            Me.ultraWeekView.CalendarInfo.Appointments.Add(DateTime.Now, DateTime.Now.AddMinutes(30.0F), "My Appointment")
            Return
        End If

        '	マップするキーに設定した KeyCode プロパティを持つすべての KeyActionMappings を削除します
        For Each keyMapping In Me.ultraWeekView.KeyActionMappings
            If keyMapping.KeyCode = keyToMap Then Me.ultraWeekView.KeyActionMappings.Remove(keyMapping)
        Next

        '	カスタム マッピングを追加します
        Me.ultraWeekView.KeyActionMappings.Add(keyMappingToAdd)

        '	他のマッピングがすべて削除されたことをユーザーに通知します
        msg = "All existing mappings for " + keyToMap.ToString() + " successfully removed." + vbCrLf
        MessageBox.Show(msg, "Remove existing KeyActionMappings", MessageBoxButtons.OK)

        '	テスト用に予定を追加します
        Me.ultraWeekView.CalendarInfo.Appointments.Add(DateTime.Now, DateTime.Now.AddMinutes(30.0F), "My Appointment")

    End Sub
using Infragistics.Win;
using Infragistics.Win.UltraWinSchedule;
using Infragistics.Win.UltraWinSchedule.WeekView;
using System.Diagnostics;

		private void CustomizeKeyActionMappings()
		{

			//	新しい KeyActionMapping オブジェクトを作成し、コントロールの
			//	KeyActionMappings コレクションに追加します新しい KeyActionMapping オブジェクトで
			//	以下のプロパティを設定します:
			//
			//	KeyCode = F2
			//	ActionCode = ExitEditModeAndSaveChanges
			//	StateDisallowed = 0 (許可されていない状態なし)
			//	StateRequired = ActivityInEditMode
			//	SpecialKeysDisallowed = All (Alt、Ctrl、または Shift が押された場合、操作を無効にする)
			//	SpecialKeysRequired = 0 (操作を実行するには、特別なキーを押す必要がない)
			//
			Keys keyToMap = Keys.F2;
			KeyActionMapping keyMappingToAdd =
				new KeyActionMapping( keyToMap,	//	KeyCode
												 UltraWeekViewAction.ExitEditModeAndSaveChanges,		//	ActionCode
												 0,		//	StateDisallowed
												 UltraWeekViewState.ActivityInEditMode,		//	StateRequired
												 SpecialKeys.All,	//	SpecialKeysDisallowed
												 0 		//	SpecialKeysRequired
												);
			
			//	コレクションに追加する前に、追加するかどうかを確認するために、
			//	KeyActionMapping プロパティを表示する MessageBox を表示します
			string msg = "The following KeyActionMapping will be added to the KeyActionMappings collection:\n\n";
			msg += "The keystoke the action will respond to is: " + keyMappingToAdd.KeyCode.ToString() + "\n";
			msg += "The action that will be performed when the key is pressed is: " + keyMappingToAdd.ActionCode.ToString() + "\n";
			msg += "The disallowed state for the action is (zero indicates no disallowed state): " + keyMappingToAdd.StateDisallowed.ToString() + "\n";
			msg += "The required state for the action is (zero indicates no required state): " + keyMappingToAdd.StateRequired.ToString() + "\n";
			msg += "The action will not be performed if any of the following special keys are pressed (zero indicates no special keys are disallowed): " + keyMappingToAdd.SpecialKeysDisallowed.ToString() + "\n";
			msg += "The action will only be performed if all of the following special keys are pressed (zero indicates no special keys are required): " + keyMappingToAdd.SpecialKeysRequired.ToString() + "\n";
			msg += "\nAre you sure you want to add the custom KeyActionMapping?\n";

			//	メッセージ ボックスを表示します
			DialogResult result = MessageBox.Show( msg, "Add KeyActionMapping", MessageBoxButtons.YesNo );

			//	ユーザーが [いいえ] を押すと、デフォルトの KeyActionMappings を変更せずに返します
			if ( result == DialogResult.No )
				return;

			//	KeyActionMapping をコントロールの KeyActionMappings コレクションに追加する前に、そのキーストロークの既存のマッピングを削除するかどうかを確認します
			//	KeyActionMappings コレクションを繰り返し処理し、特定のキーストロークの既存のマッピングの数を取得します
			//	このコレクションを繰り返し処理する場合に、削除するかどうかを決定するため、ユーザーに表示するための特定のキーストロークにマップした操作をリストする文字列を作成します
			int count = 0;
			string mapList = string.Empty;
			foreach( KeyActionMapping keyMapping in this.ultraWeekView.KeyActionMappings )
			{
				if ( keyMapping.KeyCode == keyToMap )
				{
					count ++;
					mapList += keyMapping.ActionCode.ToString() + "\n";

				}
			}

			//	マップした操作がない場合、ユーザーにメッセージを表示する
			//	必要がないため、カスタム マッピングを追加して返します
			if ( count == 0 )
			{
				this.ultraWeekView.KeyActionMappings.Add( keyMappingToAdd );
				//	テスト用に予定を追加します
				this.ultraWeekView.CalendarInfo.Appointments.Add( DateTime.Now, DateTime.Now.AddMinutes( 30.0F ), "My Appointment" );
				return;
			}

			//	削除するかどうかを決定するために、ユーザーに既存のマッピングについて通知します
			msg = "The KeyActionMappings collection already contains the following mappings for " + keyToMap.ToString() + ":\n\n";
			msg += mapList + "\n";
			msg += "Do you want to remove the existing mappings for " + keyToMap.ToString() + "?";

			//	メッセージ ボックスを表示します
			result = MessageBox.Show( msg, "Remove existing KeyActionMappings", MessageBoxButtons.YesNo, MessageBoxIcon.Information );

			//	ユーザーは [いいえ] を押すと、既存の KeyActionMappings コレクションを変更せずに返します
			if ( result == DialogResult.No )
			{
				this.ultraWeekView.KeyActionMappings.Add( keyMappingToAdd );
				//	テスト用に予定を追加します
				this.ultraWeekView.CalendarInfo.Appointments.Add( DateTime.Now, DateTime.Now.AddMinutes( 30.0F ), "My Appointment" );
				return;
			}

			//	マップするキーに設定した KeyCode プロパティを持つすべての KeyActionMappings を削除します
			foreach( KeyActionMapping keyMapping in this.ultraWeekView.KeyActionMappings )
			{
				if ( keyMapping.KeyCode == keyToMap )
					this.ultraWeekView.KeyActionMappings.Remove( keyMapping );
			}

			//	カスタム マッピングを追加します
			this.ultraWeekView.KeyActionMappings.Add( keyMappingToAdd );

			//	他のマッピングがすべて削除されたことをユーザーに通知します
			msg = "All existing mappings for " + keyToMap.ToString() + " successfully removed.\n";
			MessageBox.Show( msg, "Remove existing KeyActionMappings", MessageBoxButtons.OK );

			//	テスト用に予定を追加します
			this.ultraWeekView.CalendarInfo.Appointments.Add( DateTime.Now, DateTime.Now.AddMinutes( 30.0F ), "My Appointment" );

		}
参照