diff --git a/Source/Engine/UI/GUI/ContainerControl.cs b/Source/Engine/UI/GUI/ContainerControl.cs index 69a75aacb..e5b92430f 100644 --- a/Source/Engine/UI/GUI/ContainerControl.cs +++ b/Source/Engine/UI/GUI/ContainerControl.cs @@ -448,6 +448,8 @@ namespace FlaxEngine.GUI internal virtual void AddChildInternal(Control child) { Assert.IsNotNull(child, "Invalid control."); + if (Parent == child) + throw new InvalidOperationException(); // Add child _children.Add(child); @@ -820,13 +822,14 @@ namespace FlaxEngine.GUI protected virtual void DrawChildren() { // Draw all visible child controls + var children = _children; if (_cullChildren) { Render2D.PeekClip(out var globalClipping); Render2D.PeekTransform(out var globalTransform); - for (int i = 0; i < _children.Count; i++) + for (int i = 0; i < children.Count; i++) { - var child = _children[i]; + var child = children[i]; if (child.Visible) { Matrix3x3.Multiply(ref child._cachedTransform, ref globalTransform, out var globalChildTransform); @@ -842,9 +845,9 @@ namespace FlaxEngine.GUI } else { - for (int i = 0; i < _children.Count; i++) + for (int i = 0; i < children.Count; i++) { - var child = _children[i]; + var child = children[i]; if (child.Visible) { Render2D.PushTransform(ref child._cachedTransform); diff --git a/Source/Engine/UI/UIControl.cs b/Source/Engine/UI/UIControl.cs index 219a4fa4e..bf78bf2fd 100644 --- a/Source/Engine/UI/UIControl.cs +++ b/Source/Engine/UI/UIControl.cs @@ -58,10 +58,11 @@ namespace FlaxEngine if (containerControl != null && IsActiveInHierarchy) { var children = ChildrenCount; + var parent = Parent; for (int i = 0; i < children; i++) { var child = GetChild(i) as UIControl; - if (child != null && child.IsActiveInHierarchy && child.HasControl) + if (child != null && child.IsActiveInHierarchy && child.HasControl && child != parent) { child.Control.Parent = containerControl; }