当前位置: 首页 > news >正文

Smobiler 窗体

在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的属性,并为属性赋值。

相关文章:

  • Android用户切换系统语言后,回到App,App重新加载导致的一些问题[android:configChanges=“layoutDirection“]
  • Django部署深度学习项目-1
  • JS-sort
  • Callable接口(类似于Runnable)
  • CentOS环境下安装Nacos
  • 金仓数据库 KingbaseES 插件参考手册 S (2)
  • 营销软文的结尾怎样写?营销软文结尾怎样去设计?
  • 2022河南萌新联赛第(七)场:南阳理工学院 B 龍
  • 我做了几年的Android应用层开发,为什么还要去学习安卓系统知识?
  • [暑假]Vue框架里面 一些属性和配置项的作用
  • 【unity记录】导入标准资源包(Standard Assets)
  • SoringBoot特点
  • 浅析Java设计模式【3.4】——策略
  • time,datetime模块时间序列讲解
  • Hive的JDBC操作
  • 时间复杂度分析经典问题——最大子序列和
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • IndexedDB
  • Laravel 菜鸟晋级之路
  • Linux下的乱码问题
  • nodejs:开发并发布一个nodejs包
  • React Native移动开发实战-3-实现页面间的数据传递
  • redis学习笔记(三):列表、集合、有序集合
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 世界上最简单的无等待算法(getAndIncrement)
  • 推荐一个React的管理后台框架
  • 网页视频流m3u8/ts视频下载
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • mysql面试题分组并合并列
  • ​Java并发新构件之Exchanger
  • ​MySQL主从复制一致性检测
  • ​学习一下,什么是预包装食品?​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (2)STM32单片机上位机
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (三)Honghu Cloud云架构一定时调度平台
  • (一)认识微服务
  • (转)LINQ之路
  • (转)Scala的“=”符号简介
  • (转)winform之ListView
  • (转)详解PHP处理密码的几种方式
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET关于 跳过SSL中遇到的问题
  • .Net接口调试与案例
  • /proc/vmstat 详解
  • @EnableWebMvc介绍和使用详细demo
  • [ Linux ] Linux信号概述 信号的产生