* UIForm: 多页面框架增加PageAdded,PageSelected,PageRemoved事件

This commit is contained in:
Sunny 2022-07-05 17:49:16 +08:00
parent cab4b45ad7
commit 1a2acc5a19
5 changed files with 83 additions and 7 deletions

View File

@ -77,6 +77,12 @@ namespace Sunny.UI
_fillColor = UIStyles.Blue.TabControlBackColor;
}
[Browsable(false)]
public IFrame Frame
{
get; set;
}
/// <summary>
/// 禁止控件跟随窗体缩放
/// </summary>
@ -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
{

View File

@ -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 PageAddedPageSelectedPageRemoved事件
******************************************************************************/
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<T> GetPages<T>() where T : UIPage => SetDefaultTabControl().MainTabControl?.GetPages<T>();
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实现
}
}

View File

@ -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
{
/// <summary>

View File

@ -65,5 +65,9 @@ namespace Sunny.UI
T GetPage<T>() where T : UIPage;
List<T> GetPages<T>() where T : UIPage;
void DealPageAdded(UIPage page);
void DealPageSelected(UIPage page);
void DealPageRemoved(UIPage page);
}
}

View File

@ -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)