エクスプローラで、マウスクリックおよびキーボードの方向キーと、Ctrl、Shiftキーを使って選択する場合のルール。
DataGrid でエクスプローラ風の複数選択を実現するために調べたメモ。
リストビューは詳細選択状態とする。
説明のために、アンカー行という言葉を導入した。意味は適当に察して欲しい。
- マウスクリックの場合
- Ctrl も Shift も押されていない場合
- クリックした行を選択する。
- それ以外の行の選択を解除する。
- クリックした行をアンカー行とする。
- クリックした行をフォーカスする。
- Ctrl だけが押されている場合
- クリックした行の選択状態をトグルする(未選択ならば選択し、選択済みならば選択を解除する)。
- 他の行の選択状態は変更しない。
- クリックした行をアンカー行とする。
- クリックした行をフォーカスする。
- Shift だけが押されている場合
- アンカー行からクリックした行までを選択する。
- それ以外の行の選択を解除する。
- アンカー行は変更しない。
- クリックした行をフォーカスする。
- Ctrl と Shift が押されている場合
- クリックした行を選択する。
- アンカー行からクリックした行の手前までの選択状態を、アンカー行と同じにする(アンカー行が選択されていれば選択し、選択されていなければ選択を解除する)。
- 他の行の選択状態は変更しない。
- アンカー行は変更しない。
- クリックした行をフォーカスする。
- キーボードの場合
- 上/下キーの場合
- Ctrl も Shift も押されていない場合
- 現在のフォーカス行の前/次の行を選択する。
- それ以外の行の選択を解除する。
- 選択した行をアンカー行とする。
- 選択した行をフォーカスする。
- Ctrl だけが押されている場合
- 現在のフォーカス行の前/次の行をフォーカスする。
- 選択状態は変更しない。
- アンカー行は変更しない。
- Shift が押されている場合。
- アンカー行から、現在のフォーカス行の前/次の行までを選択する。
- それ以外の行の選択を解除する。
- アンカー行は変更しない。
- 現在のフォーカス行の前/次の行をフォーカスする。
- Ctrl が押されている場合でも同じ。
- PageUp/PageDownキーの場合
- Ctrl も Shift も押されていない場合
- 現在表示されている最も上/下の行を選択する。
- もう一度押すと、そこから現在のウィンドウに表示可能な行数だけ上/下の行を選択する。
あるいは、現在の選択行の上/下に1ページ分の項目がない場合、最も上/下の行を選択する。
- それ以外は上/下キーと同じ。
- Ctrl だけが押されている場合
- 現在表示されている最も上/下の行をフォーカスする。
- もう一度押すと、そこから現在のウィンドウに表示可能な行数だけ上/下の行をフォーカスする。
あるいは、現在の選択行の上/下に1ページ分の項目がない場合、最も上/下の行をフォーカスする。
- それ以外は上/下キーと同じ。
- Shift が押されている場合。
- アンカー行から、現在表示されている最も上/下の行までを選択する。
- もう一度押すと、そこから現在のウィンドウに表示可能な行数だけ上/下の行を追加選択する。
あるいは、現在の選択行の上/下に1ページ分の項目がない場合、最も上/下の行までを追加選択する。
- 選択した最も上/下の行をフォーカスする。
- それ以外は上/下キーと同じ。
- Hoge/Endキーの場合
- Ctrl も Shift も押されていない場合
- 現在表示されている最も上/最も下の行を選択する。
- もう一度押すと、そこから現在のウィンドウに表示可能な行数だけ上/下の行を選択する。
あるいは、現在の選択行の上/下に1ページ分の項目がない場合、最も上/下の行を選択する。
- それ以外は上/下キーと同じ。
- Ctrl だけが押されている場合
- 現在表示されている最も上/最も下の行をフォーカスする。
- もう一度押すと、そこから現在のウィンドウに表示可能な行数だけ上/下の行をフォーカスする。
あるいは、現在の選択行の上/下に1ページ分の項目がない場合、最も上/下の行をフォーカスする。
- それ以外は上/下キーと同じ。
- Shift が押されている場合。
- アンカー行から、現在表示されている最も上/最も下の行までを選択する。
- もう一度押すと、そこから現在のウィンドウに表示可能な行数だけ上/下の行を追加選択する。
あるいは、現在の選択行の上/下に1ページ分の項目がない場合、最も上/下の行を追加選択する。
- 選択した最も上/下の行をフォーカスする。
- それ以外は上/下キーと同じ。
- その他のキー
- Ctrl + A
- 全ての行を選択する。
- 最も上の行をフォーカスする。
- アンカー行は変更しない。
- Ctrl + スペース
- フォーカス行の選択をトグルする。
- フォーカス行をアンカー行にする。
- 他の行の選択状態は変更しない。
- 備考
- キーボード操作では、Shift を押している時、Ctrl キーは効果が無い。
- DataGridでは、現在表示されている最も上/下の行番号を取得する方法が(ドキュメントされている範囲では)存在しないので、PageUp/PageDownの再現は難しい。
常に、現在のフォーカス行の1ページ上/下とするのが妥当だろう。