diff --git a/Terminal.Gui/Views/ScrollView.cs b/Terminal.Gui/Views/ScrollView.cs
index 23bfedbce..1e60995a6 100644
--- a/Terminal.Gui/Views/ScrollView.cs
+++ b/Terminal.Gui/Views/ScrollView.cs
@@ -237,6 +237,39 @@ namespace Terminal.Gui {
SetNeedsLayout ();
}
+ ///
+ /// Removes the view from the scrollview.
+ ///
+ /// The view to remove from the scrollview.
+ public override void Remove (View view)
+ {
+ if (view == null) {
+ return;
+ }
+
+ SetNeedsDisplay ();
+ var container = view?.SuperView;
+ if (container == this) {
+ base.Remove (view);
+ } else {
+ container?.Remove (view);
+ }
+
+ if (contentView.InternalSubviews.Count < 1) {
+ this.CanFocus = false;
+ }
+ }
+
+ ///
+ /// Removes all widgets from this container.
+ ///
+ ///
+ ///
+ public override void RemoveAll ()
+ {
+ contentView.RemoveAll ();
+ }
+
void View_MouseLeave (MouseEventArgs e)
{
if (Application.MouseGrabView != null && Application.MouseGrabView != vertical && Application.MouseGrabView != horizontal) {
@@ -280,16 +313,6 @@ namespace Terminal.Gui {
}
}
- ///
- /// Removes all widgets from this container.
- ///
- ///
- ///
- public override void RemoveAll ()
- {
- contentView.RemoveAll ();
- }
-
///
/// Gets or sets the visibility for the vertical scroll indicator.
///
diff --git a/UnitTests/Views/ScrollViewTests.cs b/UnitTests/Views/ScrollViewTests.cs
index f441e3c86..20829dd69 100644
--- a/UnitTests/Views/ScrollViewTests.cs
+++ b/UnitTests/Views/ScrollViewTests.cs
@@ -498,5 +498,28 @@ namespace Terminal.Gui.ViewTests {
00000000000000000000000
00000000000000000000000", attributes);
}
+
+ [Fact, AutoInitShutdown]
+ public void Remove_Added_View_Is_Allowed ()
+ {
+ var sv = new ScrollView () {
+ Width = 20,
+ Height = 20,
+ ContentSize = new Size (100, 100)
+ };
+ sv.Add (new View () { Width = Dim.Fill (), Height = Dim.Fill (50), Id = "View1" },
+ new View () { Y = 51, Width = Dim.Fill (), Height = Dim.Fill (), Id = "View2" });
+
+ Application.Top.Add (sv);
+ Application.Begin (Application.Top);
+
+ Assert.Equal (3, sv.Subviews.Count);
+ Assert.Equal (2, sv.Subviews [0].Subviews.Count);
+
+ sv.Remove (sv.Subviews [0].Subviews [1]);
+ Assert.Equal (3, sv.Subviews.Count);
+ Assert.Single (sv.Subviews [0].Subviews);
+ Assert.Equal ("View1", sv.Subviews [0].Subviews [0].Id);
+ }
}
}