tui-cs/Terminal.Gui · critical · LayoutException

ComputedLayout for " ": " " linked with " " was not found…

Error message

ComputedLayout for "{superView}": "{from}" linked with "{to}" was not found. Did you forget to add it to {superView}?

What it means

During the layout topological sort, a Pos/Dim referenced another view (e.g. Pos.Left(someView)) that is not present in the same SuperView hierarchy. The layout engine cannot position a view relative to one it does not know about, so it throws with a 'did you forget to add it' hint.

Solutions

  1. Add both views to the same SuperView before relying on relative Pos/Dim.
  2. If a referenced view was removed, update the Pos to an Absolute or to the correct sibling.
  3. Check the from/to names in the message to identify the missing view.

Example fix

// before
var a = new View(); var b = new View();
a.X = Pos.Right(b); // b not in hierarchy
// after
container.Add(a, b);
a.X = Pos.Right(b);
Defensive patterns

Strategy: validation

Validate before calling

if (other.SuperView is null || !InternalSubViews.Contains(other))
    Add(other); // or fix the reference
view.X = Pos.Right(other);

Type guard

static bool AreInSameHierarchy (View a, View b) =>
    a.SuperView is not null && a.SuperView == b.SuperView;

Prevention

When it happens

Trigger: view.X = Pos.Right(otherView) where otherView was never Add()ed to the same SuperView (or any SuperView); otherView was removed before layout; otherView belongs to a different container.

Common situations: Creating a view and setting relative positions before adding either view to a container; moving a view between containers but leaving stale Pos references; referencing a view from a different dialog/window.

Related errors


AI-assisted analysis of tui-cs/Terminal.Gui@2e47b11478 (2026-08-13). Data as JSON: /api/errors/db9772349662f21a. Report an issue: GitHub.

Appendix: source

Thrown at Terminal.Gui/ViewBase/View.Layout.cs:1256

                }

                // if 'to' is not yet added to the result, add it
                if (result.Find (v => v == to) is null)
                {
                    result.Add (to);
                }

                // remove from edge
                edges.Remove ((from, to));
            }
            else if (from != superView?.GetTopSuperView (to, from) && !ReferenceEquals (from, to))
            {
                if (ReferenceEquals (from.SuperView, to))
                {
                    throw new LayoutException ($"ComputedLayout for \"{superView}\": \"{to}\" " + $"references a SubView (\"{from}\").");
                }

                throw new LayoutException ($"ComputedLayout for \"{superView}\": \"{from}\" "
                                           + $"linked with \"{to}\" was not found. Did you forget to add it to {superView}?");
            }
        }

        // return L (a topologically sorted order)
        return result;
    } // TopologicalSort

    #endregion Topological Sort

    #region Utilities

    /// <summary>
    ///     Gets the size of the SuperView's content (nominally the same as
    ///     the SuperView's <see cref="GetContentSize ()"/>) or the screen size if there's no SuperView.
    /// </summary>
    /// <remarks>
    ///     This method provides fallback logic to ensure that a size is always returned, even if the SuperView is not set or

View on GitHub (pinned to 2e47b11478)