tui-cs/Terminal.Gui · error · ArgumentNullException
X cannot be null
Error message
X cannot be null
What it means
The X property (horizontal position) must be a non-null Pos object. Terminal.Gui's layout system is fully declarative — even 'no position' is expressed as Pos.Absolute(0), never as null. A null Pos would leave the layout engine unable to compute a coordinate.
Source
Thrown at Terminal.Gui/ViewBase/View.Layout.cs:288
/// resulting in the
/// view being laid out and redrawn as appropriate in the next iteration.
/// </para>
/// <para>
/// Changing this property will cause <see cref="Frame"/> to be updated.
/// </para>
/// <para>The default value is <c>Pos.Absolute (0)</c>.</para>
/// </remarks>
public Pos X
{
get => _x;
set
{
if (Equals (_x, value))
{
return;
}
_x = value ?? throw new ArgumentNullException (nameof (value), @$"{nameof (X)} cannot be null");
PosDimSet ();
NeedsClearScreenNextIteration ();
}
}
private Pos _y = Pos.Absolute (0);
/// <summary>
/// Gets or sets the declarative vertical position for the view.
/// </summary>
/// <value>The <see cref="Pos"/> object representing the Y position.</value>
/// <remarks>
/// <para>
/// See the View Layout Deep Dive for more information:
/// <see href="https://tui-cs.github.io/Terminal.Gui/docs/layout.html"/>
/// </para>View on GitHub (pinned to 2e47b11478)
Solutions
- Use Pos.Absolute(n) for fixed positions.
- Use Pos.Center(), Pos.Percent(n), or Pos.Left(otherView) for relative layout.
- If conditionally clearing, set Pos.Absolute(0) rather than null.
Example fix
// before view.X = maybePos; // after view.X = maybePos ?? Pos.Absolute(0);
Defensive patterns
Strategy: validation
Validate before calling
view.X = pos ?? throw new ArgumentNullException(nameof(pos)); // or: view.X = pos ?? Pos.Absolute(0);
Type guard
static bool IsValidPos (Pos? p) => p is not null;
Prevention
- Always provide a concrete Pos (Absolute, Center, Percent, View).
- Use Pos.Absolute(0) as the neutral default.
- Check helper return values for null.
When it happens
Trigger: Assigning view.X = null; or a Pos-typed variable that is null (e.g. a field never initialized, or a result of a method that returned null).
Common situations: Nullable Pos returned from a helper that returns null on edge cases; conditional initialization that leaves X unset; deserialization gap.
Related errors
- Y cannot be null
- The size of an item cannot be negative.
- Target
- Content width cannot be negative.
- Content height cannot be negative.
AI-assisted analysis of tui-cs/Terminal.Gui@2e47b11478 (2026-08-13).
Data as JSON: /api/errors/d6ab601b2d2b5448.
Report an issue: GitHub.