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)