'宣言 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 テーブルに登録されたキーストロークを受信したときに発生する一連のイベントを説明しています。
例: コントロールの最初の表示日がアクティブな状態で、ユーザーが下矢印キーを押す。
次の表は、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" ); }