From 1a2acc5a197610a6e97758a5196dcdb821fcd6b0 Mon Sep 17 00:00:00 2001 From: Sunny Date: Tue, 5 Jul 2022 17:49:16 +0800 Subject: [PATCH] =?UTF-8?q?*=20UIForm:=20=E5=A4=9A=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=A1=86=E6=9E=B6=E5=A2=9E=E5=8A=A0PageAdded=EF=BC=8CPageSelec?= =?UTF-8?q?ted=EF=BC=8CPageRemoved=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SunnyUI/Controls/UITabControl.cs | 29 +++++++++++++++++++----- SunnyUI/Forms/UIForm.cs | 39 +++++++++++++++++++++++++++++++- SunnyUI/Forms/UIFormHelper.cs | 17 ++++++++++++++ SunnyUI/Frames/IFrame.cs | 4 ++++ SunnyUI/Frames/UIPage.cs | 1 + 5 files changed, 83 insertions(+), 7 deletions(-) diff --git a/SunnyUI/Controls/UITabControl.cs b/SunnyUI/Controls/UITabControl.cs index 677ee011..406cc5bf 100644 --- a/SunnyUI/Controls/UITabControl.cs +++ b/SunnyUI/Controls/UITabControl.cs @@ -77,6 +77,12 @@ namespace Sunny.UI _fillColor = UIStyles.Blue.TabControlBackColor; } + [Browsable(false)] + public IFrame Frame + { + get; set; + } + /// /// 禁止控件跟随窗体缩放 /// @@ -235,8 +241,6 @@ namespace Sunny.UI public bool SelectPage(Guid pageGuid) => Helper.SelectPage(pageGuid); - public void AddPage(UIPage page) => Helper.AddPage(page); - public bool RemovePage(int pageIndex) => Helper.RemovePage(pageIndex); public bool RemovePage(Guid guid) => Helper.RemovePage(guid); @@ -254,6 +258,12 @@ namespace Sunny.UI foreach (var page in pages) AddPage(page); } + public void AddPage(UIPage page) + { + Helper.AddPage(page); + Frame?.DealPageAdded(page); + } + public void AddPage(int pageIndex, UITabControl page) => Helper.AddPage(pageIndex, page); public void AddPage(int pageIndex, UITabControlMenu page) => Helper.AddPage(pageIndex, page); @@ -840,10 +850,17 @@ namespace Sunny.UI { if (AutoClosePage) { - pages[i].Final(); - pages[i].Close(); - pages[i].Dispose(); - pages[i] = null; + Frame.DealPageRemoved(pages[i]); + + try + { + pages[i].Final(); + pages[i].Close(); + pages[i].Dispose(); + pages[i] = null; + } + catch + { } } else { diff --git a/SunnyUI/Forms/UIForm.cs b/SunnyUI/Forms/UIForm.cs index fc037cb1..48463ea6 100644 --- a/SunnyUI/Forms/UIForm.cs +++ b/SunnyUI/Forms/UIForm.cs @@ -35,6 +35,7 @@ * 2022-04-26: V3.1.8 屏蔽一些属性 * 2022-05-06: V3.1.8 可拖拽时Padding可以调整大小 * 2022-06-11: V3.1.9 弹窗默认关闭半透明遮罩 + * 2022-07-05: V3.2.1 多页面框架增加PageAdded,PageSelected,PageRemoved事件 ******************************************************************************/ using System; @@ -2072,7 +2073,18 @@ namespace Sunny.UI #region IFrame实现 - public UITabControl MainTabControl { get; set; } + private UITabControl mainTabControl; + + [DefaultValue(null)] + public UITabControl MainTabControl + { + get => mainTabControl; + set + { + mainTabControl = value; + mainTabControl.Frame = this; + } + } public UIPage AddPage(UIPage page, int index) { @@ -2089,6 +2101,12 @@ namespace Sunny.UI public UIPage AddPage(UIPage page) { SetDefaultTabControl(); + + if (MainTabControl == null) + { + throw (new ApplicationException("未指定MainTabControl,无法承载多页面。")); + } + page.Frame = this; MainTabControl?.AddPage(page); return page; @@ -2168,6 +2186,25 @@ namespace Sunny.UI public List GetPages() where T : UIPage => SetDefaultTabControl().MainTabControl?.GetPages(); + public event OnUIPageChanged PageAdded; + + public void DealPageAdded(UIPage page) + { + PageAdded?.Invoke(this, new UIPageEventArgs(page)); + } + + public event OnUIPageChanged PageSelected; + public void DealPageSelected(UIPage page) + { + PageSelected?.Invoke(this, new UIPageEventArgs(page)); + } + + public event OnUIPageChanged PageRemoved; + public void DealPageRemoved(UIPage page) + { + PageRemoved?.Invoke(this, new UIPageEventArgs(page)); + } + #endregion IFrame实现 } } \ No newline at end of file diff --git a/SunnyUI/Forms/UIFormHelper.cs b/SunnyUI/Forms/UIFormHelper.cs index 33c6298c..f7effb43 100644 --- a/SunnyUI/Forms/UIFormHelper.cs +++ b/SunnyUI/Forms/UIFormHelper.cs @@ -34,6 +34,23 @@ namespace Sunny.UI public delegate void OnZoomScaleRectChanged(object sender, Rectangle info); + public class UIPageEventArgs : EventArgs + { + public UIPage Page { get; set; } + + public UIPageEventArgs() + { + + } + + public UIPageEventArgs(UIPage page) + { + Page = page; + } + } + + public delegate void OnUIPageChanged(object sender, UIPageEventArgs e); + public static class UIMessageDialog { /// diff --git a/SunnyUI/Frames/IFrame.cs b/SunnyUI/Frames/IFrame.cs index 27cce8e9..a556806a 100644 --- a/SunnyUI/Frames/IFrame.cs +++ b/SunnyUI/Frames/IFrame.cs @@ -65,5 +65,9 @@ namespace Sunny.UI T GetPage() where T : UIPage; List GetPages() where T : UIPage; + + void DealPageAdded(UIPage page); + void DealPageSelected(UIPage page); + void DealPageRemoved(UIPage page); } } diff --git a/SunnyUI/Frames/UIPage.cs b/SunnyUI/Frames/UIPage.cs index 45e6d76f..2ef2d6a8 100644 --- a/SunnyUI/Frames/UIPage.cs +++ b/SunnyUI/Frames/UIPage.cs @@ -454,6 +454,7 @@ namespace Sunny.UI public virtual void Init() { Initialize?.Invoke(this, new EventArgs()); + Frame.DealPageSelected(this); } protected override void OnLoad(EventArgs e)