之前有群友问这么一个问题:
![bd3bb2dae138128494930af07ca47237.png](https://i-blog.csdnimg.cn/blog_migrate/d14ebd7292727c94275784fd47c185ca.jpeg)
在做脚本的时候,可能界面会有多套功能要实现,每次使用的时候都要重新设置一遍,少量的还好,当修改的配置数据比较多的时候就会比较烦,今天的文章就来解决一下这个问题。
先来看看我做的效果:
![96c160c865fcd6aa834c2ea3a517e3cf.gif](https://i-blog.csdnimg.cn/blog_migrate/0b243e622ab41d93c6c2e26954f6d5cc.gif)
在界面中我设置3个功能按钮:分别是加载、保存和清空。
先说最简单的清空按钮:
Function 清空()
For i = 1 To 2
uip.SetAttribute("输入框"&i,{"初始文本":""})
Next
For i = 1 To 2
uip.SetAttribute("多选框"&i,{"选中":false})
Next
End Function
在案例中我是有两个输入框和两个多选框要修改,考虑到实际应用的时候会用更多,所以这里我用循环。为了让循环和界面元素有相关性,我在界面元素命名的时候,都使用统一的界面元素名+序号的格式,比如:输入框1,输入框2,……当然这种命名也符合大家的使用习惯。
这样在使用的时候,放在循环中就可以变成 “输入框”&i(i是循环计次变量)当i=1的时候,uip.SetAttribute("输入框"&i,{"初始文本":""}),就是让输入框1的初始文本为空白。同理uip.SetAttribute("多选框"&i,{"选中":false})就是让多选框1变成未选中的状态。当i等于其他数字的时候,就会把对应的界面元素清空或者变成未选中状态。
用循环有一个好处,就是界面无论有多少个同样的元素,只要修改一下循环的次数就可以了。
关于保存和加载功能是这期案例的难点,我们先说说保存功能,有以下几个知识点:
![3835f83ec7ce04429b35e6e98b63f729.png](https://i-blog.csdnimg.cn/blog_migrate/51c7e71ba2d18a91de86a4a1ab7cf17c.jpeg)
一、使用文本保存界面配置数据,并用数字命名,数字来自下拉框的序号。
![d176d2bccb1a65f8e37f5f9a24793931.png](https://i-blog.csdnimg.cn/blog_migrate/2982428807dd56bf84838e8709f6c93e.jpeg)
二、文本内容以json格式存储起来,方便调用。
![4989c775c7cd8233c467cb6a808f4e2a.png](https://i-blog.csdnimg.cn/blog_migrate/61f6ca1dd71ca114cdb87851605744a2.jpeg)
三、同清空功能类似,按界面元素类型保存,界面元素命名也是名称+序号的形式,然后通过循环保存,在多个相同元素就只修改循环次数即可。
操作思路:
第一步:获取界面下拉框的选项序号,默认是从0开始的。
dim a=uip.getAttribute("下拉框1")
Dim b=a["初始选项"]
第二步:把获取的序号作为配置文件的保存名称。
![d176d2bccb1a65f8e37f5f9a24793931.png](https://i-blog.csdnimg.cn/blog_migrate/2982428807dd56bf84838e8709f6c93e.jpeg)
第三步:以上一步获取的名字新建一个文本,方便后续往文本中追加数据。
file.write("/sdcard/pictures/" & b & ".txt", "")
第四步:按照元素循环写入,输入框、多选框、下拉框,文本框等,下面是以输入框为例:
![1b43329fa690d585e4072a3174d731aa.png](https://i-blog.csdnimg.cn/blog_migrate/6abc7d5eb5d29528f2930369675daaf9.jpeg)
先读取输入框里面的内容m["初始文本"],考虑到要json格式来保存:
"输入框1":"公众号3分钟学堂",
需要补充很多内容:"""输入框"&i&""":"""&m["初始文本"]&""","
循环把所有的界面元素读取出来保存,这里面我在编写的时候,发现布尔值也就是true和false是不能进行字符串拼接,所以我直接换成了,把true换成1,false换成0,然后在存储起来。
![3ba843ba2536ad5f8e44c279b38db2c7.png](https://i-blog.csdnimg.cn/blog_migrate/05aef0d235b5106712d80575af4393ce.jpeg)
第五步:所有元素内容都保存完以后,把json格式需要的前后花括号补充上。
Dim x=file.read("/sdcard/pictures/" & b & ".txt")
file.write("/sdcard/pictures/" & b & ".txt","{"&left(x,len(x)-1)&"}")
这几步以后保存功能就完成了。
加载功能的介绍:
![36f403ac9c282166e62ab97f389f70c0.png](https://i-blog.csdnimg.cn/blog_migrate/38ac2edf073d7c90cceb245bb2a0c419.jpeg)
所谓加载其实就是把保存的内容读取出来。
第一步:根据下拉框来确定读取哪个文本内容,比如配置1,序号是0,那么就是读取0.txt这个文本。
第二步:把读取的内容json转表
dim t=Encode.JsonToTable(x)
第三步:循环写入到界面中
For i = 1 To 2
uip.SetAttribute ("输入框"&i,{"初始文本":t["输入框"&i]})
Next
对于多选框,就先判断是1还是0,然后在写入true和false。
这样加载读取就完成了,对于有大量的元素,在元素命名和填写循环次数的时候一定要认真,不要填错了。
好了本期教程就这些内容,代码源文件我会上传到付费群 78237147,如果有需要可以去群文件下载。