diff --git a/Bin/SunnyUI.dll b/Bin/SunnyUI.dll index a3eead5a..f4566c01 100644 Binary files a/Bin/SunnyUI.dll and b/Bin/SunnyUI.dll differ diff --git a/SunnyUI/Controls/UITabControl.cs b/SunnyUI/Controls/UITabControl.cs index fe5cfe3d..6904f8eb 100644 --- a/SunnyUI/Controls/UITabControl.cs +++ b/SunnyUI/Controls/UITabControl.cs @@ -489,7 +489,7 @@ namespace Sunny.UI { if (ShowCloseButton) { - if (BeforeRemoveTabPage == null || (BeforeRemoveTabPage != null && BeforeRemoveTabPage.Invoke(this, removeIndex))) + if (BeforeRemoveTabPage == null || BeforeRemoveTabPage.Invoke(this, removeIndex)) { RemoveTabPage(removeIndex); } @@ -498,7 +498,7 @@ namespace Sunny.UI { if (DrawedIndex == removeIndex) { - if (BeforeRemoveTabPage == null || (BeforeRemoveTabPage != null && BeforeRemoveTabPage.Invoke(this, removeIndex))) + if (BeforeRemoveTabPage == null || BeforeRemoveTabPage.Invoke(this, removeIndex)) { RemoveTabPage(removeIndex); } @@ -515,6 +515,10 @@ namespace Sunny.UI public event OnAfterRemoveTabPage AfterRemoveTabPage; + [DefaultValue(false)] + [Description("多页面框架时,包含UIPage,在点击Tab页关闭时关闭UIPage"), Category("SunnyUI")] + public bool AutoClosePage { get; set; } + internal void RemoveTabPage(int index) { if (index < 0 || index >= TabCount) @@ -522,6 +526,19 @@ namespace Sunny.UI return; } + TabPage tabPage = TabPages[index]; + + if (AutoClosePage) + { + var pages = tabPage.GetControls(); + for (int i = 0; i < pages.Count; i++) + { + pages[i].Final(); + pages[i].Dispose(); + pages[i] = null; + } + } + TabPages.Remove(TabPages[index]); AfterRemoveTabPage?.Invoke(this, index); diff --git a/SunnyUI/Frames/UIMainFrame.cs b/SunnyUI/Frames/UIMainFrame.cs index f21f5d06..13d1d541 100644 --- a/SunnyUI/Frames/UIMainFrame.cs +++ b/SunnyUI/Frames/UIMainFrame.cs @@ -34,8 +34,34 @@ namespace Sunny.UI MainContainer.TabVisible = false; MainContainer.BringToFront(); MainContainer.TabPages.Clear(); + + MainContainer.BeforeRemoveTabPage += MainContainer_BeforeRemoveTabPage; + MainContainer.AfterRemoveTabPage += MainContainer_AfterRemoveTabPage; } + [DefaultValue(false)] + [Description("多页面框架时,包含UIPage,在点击Tab页关闭时关闭UIPage"), Category("SunnyUI")] + public bool AutoClosePage + { + get => MainContainer.AutoClosePage; + set => MainContainer.AutoClosePage = value; + } + + private void MainContainer_AfterRemoveTabPage(object sender, int index) + { + AfterRemoveTabPage?.Invoke(sender, index); + } + + private bool MainContainer_BeforeRemoveTabPage(object sender, int index) + { + return BeforeRemoveTabPage == null || BeforeRemoveTabPage.Invoke(this, index); + } + + public event UITabControl.OnBeforeRemoveTabPage BeforeRemoveTabPage; + + public event UITabControl.OnAfterRemoveTabPage AfterRemoveTabPage; + + protected override void OnShown(EventArgs e) { MainContainer.BringToFront();