ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Smobiler 窗体

2022-08-30 15:34:02  阅读:180  来源: 互联网

标签:Smobiler 界面 SmobilerForm2 窗体 关闭 SmobilerForm3


在Smobiler开发过程中,大家经常会对窗体的跳转,显示,关闭,生命周期存在一些不明白的地方,这篇文章主要用来说明Smobiler窗体。

Smobiler Form

  • 和WindowsForm编程一样,在手机上显示的界面在Smobiler就是一个窗体,使用Show方法打开新的Smobiler窗体时,在客户端上也会打开新的界面,Smobiler的窗体是带状态的,也就是说你在窗体上定义的变量在每次客户端处理的时候都是保持的,关闭界面回到上一个界面时,上一个界面的状态变量也会维持,这里和Web的Page是不一样的,Web的Page在每一次显示的时候都需要重新刷新(就像后退一样)。

Smobiler 窗体堆栈

和Android一样,Smobiler窗体也是使用堆栈的方式,即使用Show方法会将新的窗体入栈,使用Close方法会将窗体出栈并显示栈顶的窗体,下面来说明这个过程。

  • 每一个Smobiler应用都包含了一个起始的窗体,这里我们使用SmobilerForm1来表示第一个窗体。

  • 在SmobilerForm1中调用方法this.Show(new SmobilerForm2());时就会打开SmobilerForm2窗体,这时会将SmobilerForm2窗体入栈,即在栈顶,这时手机界面上也会显示为SmobilerForm2的窗体。

  • 在SmobilerForm2窗体上调用方法this.Show(new SmobilerForm3());打开SmobilerForm3这个窗体,同上面的过程,会将SmobilerForm3窗体入栈。

  • 在SmobilerForm3上调用this.Close(),这时会将SmobilerForm3出栈,这时栈顶为SmobilerForm2,此时手机界面上也会显示SmobilerForm2的界面。

  • 说明
    • Smobiler窗体堆栈有限制,默认为10层,最大50层,原因是由于每一个窗体都占用一定的内存,过多的窗体栈会导致内存增加过快,并且存在大量无效的窗体。所以如果从A-B再回到A窗体时,使用Close方法关闭B窗体即可回到A窗体,不要从B窗体再使用Show方法显示A窗体。
    • Smobiler窗体是严格基于堆栈的,不允许跨栈访问,窗体的关闭必须按顺序出栈,比如A-B-C,如果回到A窗体,必须先关闭C,再关闭B
  • 代码示例 https://github.com/comsmobiler/BlogsCode/tree/master/Source/BlogsCode_SmobilerForm

Smobiler 窗体生命周期

一个窗体被打开到关闭会经历如下生命周期

  • Load 在窗体第一次被装载时触发此事件(一个窗体只会触发一次此事件)
  • Deactivate 在打开新的窗体时,当前窗体会触发Deactivate事件,代表当前窗体没有被激活。
  • Activated 打开的窗体关闭时,会回到当到当前窗体触发Activated事件,代表当前窗体被激活了。
  • Closing 窗体关闭时的事件。可在此事件中取消关闭操作。
  • Closed 窗体关闭后的事件。

Smobiler 窗体传值

  • 为窗体界面传值时,可通过以下几个方式
    • 构造函数。在构建函数中切记需要调用当前的默认构造函数,即在新的构造函数后面加上 :this()
    • this.Client.Session,但是不要使用静态变量(static声明的变量),静态变量是所有客户端共享的,而this.Client.Session是当前客户端所有界面共享的。不会影响其它客户端。
    • 在窗体上创建Public的属性,并为属性赋值。

标签:Smobiler,界面,SmobilerForm2,窗体,关闭,SmobilerForm3
来源: https://www.cnblogs.com/smobiler/p/16639427.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有