tui-cs/Terminal.Gui · error · ArgumentException
MouseHoldRepeat only accepts null, Pressed, Released or Clic
Error message
MouseHoldRepeat only accepts null, Pressed, Released or Clicked mouse flags.
What it means
The MouseHoldRepeat property enables auto-repeat behavior for a mouse button held down. It only accepts null (disabled), or a single MouseFlags value from the Pressed, Released, or Clicked families (Left/Middle/Right variants of each). Any value outside these four families (e.g. wheel, button4, or a bare modifier flag) is rejected because the repeat timer can only fire on a concrete button-press lifecycle event.
Source
Thrown at Terminal.Gui/ViewBase/Mouse/View.Mouse.cs:333
{
bool isPressed = (value.Value & (MouseFlags.LeftButtonPressed | MouseFlags.MiddleButtonPressed | MouseFlags.RightButtonPressed)) != 0;
bool isReleased = (value.Value & (MouseFlags.LeftButtonReleased | MouseFlags.MiddleButtonReleased | MouseFlags.RightButtonReleased)) != 0;
bool isClicked = (value.Value
& (MouseFlags.LeftButtonClicked
| MouseFlags.MiddleButtonClicked
| MouseFlags.RightButtonClicked
| MouseFlags.LeftButtonDoubleClicked
| MouseFlags.MiddleButtonDoubleClicked
| MouseFlags.RightButtonDoubleClicked
| MouseFlags.LeftButtonTripleClicked
| MouseFlags.MiddleButtonTripleClicked
| MouseFlags.RightButtonTripleClicked))
!= 0;
if (!isReleased && !isPressed && !isClicked)
{
throw new ArgumentException (@"MouseHoldRepeat only accepts null, Pressed, Released or Clicked mouse flags.", nameof (value));
}
}
CWPPropertyHelper.ChangeProperty (this,
ref field,
value,
OnMouseHoldRepeatChanging,
MouseHoldRepeatChanging,
DoWork,
OnMouseHoldRepeatChanged,
MouseHoldRepeatChanged,
out _);
return;
void DoWork (MouseFlags? newValue)
{
if (newValue.HasValue)View on GitHub (pinned to 2e47b11478)
Solutions
- Use a single Clicked or Pressed flag from one button family, e.g. MouseFlags.LeftButtonClicked.
- Pass null to disable the repeat timer entirely.
- If you need wheel-based scrolling, bind a mouse handler via MouseBindings instead of MouseHoldRepeat.
Example fix
// before view.MouseHoldRepeat = MouseFlags.WheeledUp; // after view.MouseHoldRepeat = MouseFlags.LeftButtonPressed;
Defensive patterns
Strategy: validation
Validate before calling
static MouseFlags? ValidHoldRepeat (MouseFlags? f) =>
f is null || (((int)f.Value & 0b111) != 0) ? f : null;
// then: view.MouseHoldRepeat = ValidHoldRepeat(myFlags) ?? throw new ArgumentException("bad flags"); Type guard
static bool IsValidMouseHoldRepeat (MouseFlags? f) =>
f is null || (f.Value & (MouseFlags.LeftButtonPressed | MouseFlags.MiddleButtonPressed |
MouseFlags.RightButtonPressed | MouseFlags.LeftButtonReleased | MouseFlags.MiddleButtonReleased |
MouseFlags.RightButtonReleased | MouseFlags.LeftButtonClicked | MouseFlags.MiddleButtonClicked |
MouseFlags.RightButtonClicked | MouseFlags.LeftButtonDoubleClicked | MouseFlags.MiddleButtonDoubleClicked |
MouseFlags.RightButtonDoubleClicked | MouseFlags.LeftButtonTripleClicked | MouseFlags.MiddleButtonTripleClicked |
MouseFlags.RightButtonTripleClicked)) != 0; Prevention
- Only use single Pressed/Released/Clicked flags from one button family.
- Use null to disable, not an arbitrary flag.
- Reserve wheel events for MouseBindings, not MouseHoldRepeat.
When it happens
Trigger: Setting view.MouseHoldRepeat to MouseFlags.WheeledUp, MouseFlags.WheeledDown, MouseFlags.Button1Clicked combined with a bare flag like MouseFlags.ButtonShift, or any MouseFlags value that does not include at least one of LeftButtonPressed/Released/Clicked (or the Middle/Right equivalents).
Common situations: Porting a v1 scroll handler that used wheel events for auto-repeat; passing a flags enum built by OR-ing multiple button families; forgetting the property models a single hold gesture, not an arbitrary binding.
Related errors
- Cannot change timeout while mouse is held down. Call Stop()
- Driver not initialized. Call Init() first.
- OmitClassName is not allowed when Scope is AppSettingsScope
- Expected start of array for MouseFlags[].
- Expected string token in MouseFlags array, got {reader.Token
AI-assisted analysis of tui-cs/Terminal.Gui@2e47b11478 (2026-08-13).
Data as JSON: /api/errors/009dc24275cf84cf.
Report an issue: GitHub.