← Back to Home • Next: MultiSelect — Styles →
How the MultiSelect<T> control behaves while it is running: keyboard, checking, filtering, grouping,
paging, the selection range, validation, history, and view-only mode.
Which cities? Seattle (Length: 7) ← prompt + live answer (follows the cursor) + ExtraInfo
Type to filter ← description (optional / dynamic)
North America ← group header (grouped lists)
› [x] Seattle (Length: 7) ← focused item (checked) + ExtraInfo
[ ] New York (Length: 8)
Asia
[x] Tokyo (Length: 5)
Filter: to_ ← live filter text (when filtering)
Page 1/2 ← pagination
Space: check F2: all Enter: confirm ← tooltip
The answer line updates as you navigate and includes
ExtraInfo/ExtraInfoAsyncwhen set — useful when a row’s own text is too wide for the console and would otherwise be cut off, since this line scrolls horizontally (Home/End/←/→). Once confirmed (Enter), the final answer shown is the checked-items summary (BuildCheckedItemsText) — noExtraInfo.
Every region can be recolored — see Styles.
| Key | Action |
|---|---|
↑ / ↓ |
Move focus up / down |
Page Up / Page Down |
Jump one page |
Ctrl+Home / Ctrl+End |
First / last item |
Space |
Toggle the checkbox of the focused item (runs the check predicate) |
Space (on a group header) |
Toggle every item in that group |
F2 |
Toggle all — check all items, or uncheck them if all are checked |
F3 |
Filter only selected — show only the checked items; press again to leave the view |
Enter |
Confirm the checked set (runs range validation) |
Esc |
Abort → IsAborted == true, Content is an empty array |
| Any printable character | Type to filter, or jump to the next match when filtering is Disabled |
Backspace |
Edit the filter text |
Home / End / ← / → |
Scroll the answer line horizontally (when it overflows the width) |
F1 |
Cycle tooltip content |
Ctrl+F1 |
Show / hide the tooltip |
Disabled items and separators are skipped automatically as you move. The F2 toggle-all and F3
filter-selected hotkeys are the multi-select additions over Select<T>.
There is no
F4wildcard-selection hotkey — that was dead config (HotKeySelectWildcard) that has since been removed entirely from the codebase, not a feature that belongs to some other control instead.The physical keys for
F2/F3come fromPromptPlus.Config.HotKeyToggleAllandHotKeyFilterAllSelected; both are configurable. See Keyboard Bindings.
PredicateChecked validator (if configured); a rejected check is
refused and an error line appears.When Filter is Contains or StartsWith, typing narrows the visible list in
real time:
When Filter is Disabled (the default), typing a printable character instead
jumps focus to the next item whose text starts with that character (wrapping around) — arrow keys
still work as normal.
F3 toggles a view that shows only the checked items, so the user can review or trim a large
selection:
AddGroupedItem / AddGroupedItems render a header above their items;
the header repeats appropriately as the list scrolls.HideTipGroup.AddSeparator draws a divider line (single, double, or a custom char).
Separators are purely visual and are skipped during navigation.Grouped and ungrouped items can be mixed in one list.
TextSelector decides the label; without it, ToString() is used and
enum members honor their [Display(Name = ...)] attribute.[Display(Order = ...)] when present.ExtraInfo adds a secondary label for the focused row, wrapped by the
extra-info prefix/suffix (default ( ), configurable).Pressing Enter:
Range is set, the count of checked items is validated —
T[].The running error line also updates live as you check/uncheck against the range, so the user sees when
the selection becomes valid. In ViewOnly mode, Enter always confirms (there is
nothing to validate).
Default(values) pre-checks every matching item; provide
DefaultMatchBy for records/classes so the right rows are located.EnableHistory, confirmed selections are stored on disk;
UseDefaultHistory (or Default(..., useDefaultHistory: true))
restores the last set on the next run.MinPrefixLength, MaxItems, ExpirationTime, FilterType, PageSize) match
the Input history options.ViewOnly() renders the list for display only:
Default or AddItems(..., ischecked: true) to show a fixed checked set.Set per instance via Options(...), or globally on
PromptPlus.Config:
| Option | Effect on MultiSelect<T> |
|---|---|
EnabledAbortKey(false) |
Removes Esc — the user must confirm |
HideAfterFinish(true) |
Erases the list after confirm — the whole control is erased, not just the interactive part |
ShowTooltip(false) |
Hides the keyboard hint line |
Prompt(...) / Description(...) |
Overrides the prompt / description text |
PageSize can be set per control (PageSize) or globally
(PromptPlus.Config.PageSize).
.Content as an empty array — never null. Branch on
IsAborted, and check .Content.Length to distinguish “confirmed nothing” from a real selection.DefaultMatchBy, Default on
records/classes may not check the intended rows.…; the full item is still returned in
.Content.Range limits how many are checked (at Enter), while
PredicateChecked limits which items may be checked (at Space).Options