201710032355->使用静态方法记录窗体加载
2017-10-03 23:55
190 查看
根据之前窗体的四个基本生命周期
在静态方法中检测窗体是否加载与是否展示
若加载,则调用窗体的进入和刷新
若没有加载的话则调用窗体初始化以及进入和刷新
当然还有关闭窗体
关键点
1.每次打开窗体检测allpages是否已经打开过
2.需要展示的窗体都加入shownpages,压入堆栈
3.关闭窗体则需扫描shownpages,有则关闭,无则忽略
详细代码:
public static void ShowPage<T>() where T : AppBasePages, new()
{
string name = typeof(T).Name;
if (AllPages.IsNonNullOrEmpty() && AllPages.ContainsKey(name))
{
ShowPage(name, AllPages[name], null, null);
}
else
{
T t = new T();
ShowPage(name, t, null, null);
}
}
public static void ShowPage(string name, AppBasePages pages, object content, Action callback = null)
{
if (AllPages.IsNull()) { AllPages = new Dictionary<string, AppBasePages>(); }
AppBasePages page = null;
if (!AllPages.ContainsKey(name))
{
AllPages.Add(name, pages);
}
page = AllPages[name];
page.Show();
}
public static void ClosePage(string name, AppBasePages pages, Action callback = null)
{
if (ShownPages.IsNonNullOrEmpty() && pages.IsNonNull() && pages.CacheGameObject.IsNonNull())
{
if (ShownPages.ContainsKey(pages.CacheGameObject.name))
{
ShownPages[pages.CacheGameObject.name].Close();
ShownPages.Remove(pages.CacheGameObject.name);
}
}
}
public static void ClosePage<T>()
{
string name = typeof(T).Name;
if (AllPages.ContainsKey(name))
{
ClosePage(name, AllPages[name], null);
}
}
public static int UIDeep { get; set; }
public static Dictionary<string, AppBasePages> AllPages { get; set; }
public static Dictionary<string, AppBasePages> ShownPages { get; set; }
在静态方法中检测窗体是否加载与是否展示
若加载,则调用窗体的进入和刷新
若没有加载的话则调用窗体初始化以及进入和刷新
当然还有关闭窗体
关键点
1.每次打开窗体检测allpages是否已经打开过
2.需要展示的窗体都加入shownpages,压入堆栈
3.关闭窗体则需扫描shownpages,有则关闭,无则忽略
详细代码:
public static void ShowPage<T>() where T : AppBasePages, new()
{
string name = typeof(T).Name;
if (AllPages.IsNonNullOrEmpty() && AllPages.ContainsKey(name))
{
ShowPage(name, AllPages[name], null, null);
}
else
{
T t = new T();
ShowPage(name, t, null, null);
}
}
public static void ShowPage(string name, AppBasePages pages, object content, Action callback = null)
{
if (AllPages.IsNull()) { AllPages = new Dictionary<string, AppBasePages>(); }
AppBasePages page = null;
if (!AllPages.ContainsKey(name))
{
AllPages.Add(name, pages);
}
page = AllPages[name];
page.Show();
}
public static void ClosePage(string name, AppBasePages pages, Action callback = null)
{
if (ShownPages.IsNonNullOrEmpty() && pages.IsNonNull() && pages.CacheGameObject.IsNonNull())
{
if (ShownPages.ContainsKey(pages.CacheGameObject.name))
{
ShownPages[pages.CacheGameObject.name].Close();
ShownPages.Remove(pages.CacheGameObject.name);
}
}
}
public static void ClosePage<T>()
{
string name = typeof(T).Name;
if (AllPages.ContainsKey(name))
{
ClosePage(name, AllPages[name], null);
}
}
public static int UIDeep { get; set; }
public static Dictionary<string, AppBasePages> AllPages { get; set; }
public static Dictionary<string, AppBasePages> ShownPages { get; set; }
相关文章推荐
- 使用<img>标签加载php文件,记录页面访问讯息
- 使用<img>标签加载php文件,记录页面访问讯息
- 在IE浏览器中使用Windows窗体控件<转自网络>
- 转载只为记录经典之<va_start va_arg va_end 的使用和原理二>
- 使用5种不同的方法加载水晶报表(Windows 窗体)
- vs2008 使用c#编写web浏览器加载的windows窗体控件
- 转载只为记录经典之<使用linux中的sed编辑器>
- 使用5种不同的方法加载水晶报表(Windows 窗体)
- 使用反射加载MDI窗体
- 窗体Controls的OfType<>方法的使用
- SQLLDR使用-100万条记录的数据加载
- DevExpress 使用 XtraTabbedMdiManager 控件以 Tab样式加载 Mdi窗体并合并 RibbonControl 解决方案
- 我的Android进阶之旅------>Android通过使用Matrix旋转图片来模拟碟片加载过程
- 使用seajs出现间歇性jquery加载失败的问题记录
- SwitchRecord 在连续窗体视图中使用上下箭头键在记录中上下移动
- <转>记录一些BCB6的使用心得
- 窗体Controls的OfType<>方法的使用
- 【VS Shell Integrated】在VS.Net 2008 IDE中如何设置直接弹出的WPF窗体的Owner(对<在VS.Net 2008 IDE中直接使用WPF窗体作为弹出窗体>的补充
- 使用反射加载MDI窗体
- Struts中用<bean:size>和<bean:write>的使用,用于显示集合的总记录数