-
钉钉小程序复选框 全选反选 表单获取内容有误处理
2020-05-28 13:53:45当我反复点击了全选后 点击form表单的保存 获取的 表单的value中 关于复选框的值 会重复出现多个 例如复选框本身5个 当我反复点击全选5次后 复选框的value变成了25 原因是 利用item 循环的复选框 虽然通过外在修改...问题描述
我的每一个复选框 是 利用 data声明的数组进行循环 遍历出来的
然后当我点击全选及反选的时候 我操作了data中的item 遍历修改了 ischeck属性 页面上也是利用这个属性显示选中/非选中
出现的bug
当我反复点击了全选后 点击form表单的保存 获取的 表单的value中 关于复选框的值 会重复出现多个 例如复选框本身5个 当我反复点击全选5次后 复选框的value变成了25 原因是 利用item 循环的复选框 虽然通过外在修改了他的checked的属性 但是之前渲染的复选框 的值 依然存在
解决办法
axml 部分
<form onSubmit="formSubmit" id="myform"> <checkbox-group name="members"> <label class="checkbox" a:for="{{items}}" > <checkbox name="checkbox" onChange="checkSingle" data-ckindex="{{index}}" value="{{item}}" checked="{{item.isCheck}}" disabled="{{item.disabled}}" /> <text class="checkbox-text">{{item.realName}}</text> </label> </checkbox-group> <view class="{{items.length == 0 ? 'hidden' : 'checkbox_right'}}"> <checkbox value='全选' onChange='checkedAll'></checkbox> <text >一键全选</text> </view> <button class="btn" formType="submit">保存</button> </form>
js部分
formSubmit:function(e){ const params = e.detail.value; delete params['members'] params['members'] = this.data.items.filter((i)=> i.isCheck) console.info(params) }, checkSingle:function(e){ console.info(e) let ckval = e.detail.value let ckindex = e.currentTarget.dataset.ckindex let list = this.data.items.concat(); list[ckindex]['isCheck'] = ckval; this.setData({ items: list }) }, checkedAll:function (e) { console.info(e) let that = this let list = that.data.items.concat(); list.map(o => { o.isCheck = e.detail.value; }); that.setData({ items: JSON.parse(JSON.stringify(list)) }) }
解决思路:
1.form表单提交的时候 放弃使用 关于复选框的value 统一使用 data中 循环的数组数据
2.全选 或者单点 某个复选框的时候 都去操作一下 data中的item 开始想循环 考虑到效率 这里利用了索引取值 提高性能
3. 单点 全选 都操作 data中的数组中的对象 选中 ischeck => true 取消 ischeck => false
4. 最后form表单提交 删除 value中的复选框信息 然后 将data中的复选框信息赋值给 form的value里 这里使用filter过滤 筛掉 ischeck 是false的情况
-
小程序批量选中,获取复选框id以及页面传值修改数据
2019-04-02 10:00:031、这里checkbox有个大坑,本来想用小程序自带复选框,但终究满足不了需求,所以自定义按钮,给予选中及未选中状态再自定义属性绑定事件获取id, 2、直接setData修改数组中的某一项的注意点 效果图: 结果:提交的...需求:动态渲染表格数据,批量选中表格行,选中之后把这些数据通过公共变量带到下一个页面进行展示再进行修改保存。
注意点:
1、这里checkbox有个大坑,本来想用小程序自带复选框,但终究满足不了需求,所以自定义按钮,给予选中及未选中状态再自定义属性绑定事件获取id,
2、直接setData修改数组中的某一项的注意点
效果图:
结果:提交的数据,要提交的id及要修改的数据页面部分
<view class="table"> <view class="thead"> <view class='pin'>品名</view> <view>厚度</view> <view>宽度</view> <view>价格</view> <view>改后价格</view> </view> <view wx:for="{{listData}}" wx:key="{{code}}" class="tbody"> <view class='pin'> <block wx-if="{{!item.checked}}"> <icon type='circle' class='icon_none' data-index="{{index}}" bindtap="selectList"></icon> </block> <block wx-if="{{item.checked}}"> <icon type="success" color="green" data-index="{{index}}" bindtap="selectList" /> </block> <view>{{item.text}}</view> </view> <view>{{item.hou}}</view> <view>{{item.kuan}}</view> <view>{{item.price}}</view> <view>{{item.uprice}}</view> </view> <view class='note' wx:if="{{close}}"> <view class='notecon'> <view class='note-lef'> <image src='../images/fb.png'></image> <text>红色数字表示包含该值!</text> </view> <view class='note-rig' catchtap='closenote' > <image src='../images/fb2.png'></image> </view> </view> </view> </view> <view class='footer' wx:if="{{!posting}}"> <button class='btn' bindtap='updateJc'>修改基础价格</button> <button class='btn2' bindtap='updateMx'>修改明细价格</button> </view> <view class='footer' wx:if="{{posting}}"> <view class='footer-lef'> <radio-group class="radio-group" bindchange="radioChange"> <label class="radio" wx:for="{{items}}" wx:key> <radio value="{{item.id}}" checked="{{item.checked}}" /> {{item.value}} </label> </radio-group> </view> <view class='footer-mid'><input type='text' placeholder='20'></input></view> <view class='footer-rig'><button bindtap='saveUp'>保存</button></view> </view>
数据部分:
data: { close: true, posting: false, mingxi: "", arr: [],//选中的数组对象 listData: [{ "id": 0, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" }, { "id": 1, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" }, { "id": 2, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" }, { "id": 3, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" }, { "id": 4, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" }, { "id": 5, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" }, { "id": 6, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" }, { "id": 7, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" }, { "id": 8, "text": "冷轧窄带", "hou": "0.4-0.45 ", "kuan": "7-19.9", "price": "3902", "uprice": "2334" } ], items: [{ value: "加", id: "0" }, { value: "减", id: "1" }] },
页面初始化给每个复选框添加未选中属性
onLoad: function (options) { let dataList = this.data.listData; dataList.map(function (value) { value.checked = false; }) },
点击复选框获取复选框id
selectList(e) { const index = e.currentTarget.dataset.index; let carts = this.data.listData; const checked = carts[index].checked; carts[index].checked = !checked; let listArr = []; for (var i in carts) { if (carts[i].checked) { listArr.push(carts[i]); } } this.setData({ listData: carts, arr: listArr }); },
点击修改基础价格跳转页面并把点击的数据带到下一页
updateJc(e) { if (this.data.arr.length == 0) { wx.showToast({ title: '请至少选择一项', icon: "none" }) return } wx.navigateTo({ // url: './updjichu/index?jichu=' + JSON.stringify(this.data.arr) url: './updjichu/index?jichu' }) app.fabuData=JSON.stringify(this.data.arr); },
1、在下一个页面进行数据接收,拿到数据存到变量
2、拿到文本框数据,双向数据绑定,使用this.setData修改数据中的价格
3、把每行对应的id和修改后的价格组成对象并提交onLoad: function(options) { console.log(app.fabuData) this.setData({ listData: JSON.parse(app.fabuData) }) }, // 获取价格输入框 userNameInput: function(e) { let index=e.target.dataset.index; let up = `listData[${index}].price`; this.setData({ [up]:e.detail.value }) // this.data.listData[index].price = e.detail.value; // console.log(this.data.listData) }, // 运行计算 calculate(e) { let arr=this.data.listData.map((item, index) => { var objr={}; objr.id=this.data.listData[index].id; objr.price = this.data.listData[index].price return objr }) this.setData({ calculateArr:arr }) console.log(arr); },
-
PC微信逆向:分析通用设置数组
2020-05-15 14:38:14这种复选框的设置无非就是一个标志位的问题,分析起来比较简单,中间肯定会涉及到一些数据结构。作为开发者肯定不会把每一个设置选项都单独存放,而是放在一个数据结构里方便管理。 首先用CE附加微信 在取消勾选...前言
微信版本2.8.0.121
分析诉求->通过代码实现关闭微信通用设置里的“有更新时自动升级微信"。
通用设置切入点
这种复选框的设置无非就是一个标志位的问题,分析起来比较简单,中间肯定会涉及到一些数据结构。作为开发者肯定不会把每一个设置选项都单独存放,而是放在一个数据结构里方便管理。
首先用CE附加微信
在取消勾选状态下搜索0
在勾选状态下搜索1
重复这个步骤,直到筛选出唯一一个地址。
然后在这个地址上下内存写入断点,并且让程序断下
分析通用设置数据结构
eax+0x8就是我们要找的标志位,这里要往上追eax的值
基址=eax+0x8
eax一般作为返回值来源于上面的call,但是上面一个call不会断下,说明不来自于call,而是来自[ecx]
基址=[ecx]+0x8
在这个位置下断,查看[ecx]+0x8的值,这里我们发现不是我们要找的标志位,说明中间有代码改变了ecx的值
一直F7往下走,发现有一个循环,先确定循环头和循环尾,接着来分析整段代码
先比较[eax+0x4]的值是否等于ebx,这里是循环的跳出条件。ebx等于0x69,这个0x69后续等分析完了整个结构大概可以猜到是什么。
接着edx自增1,edx的值在循环体外被初始化为0,说明这个edx相当于循环的i。然后比较edx和esi,esi的值为0x12,也就是说循环的次数最大为0x12,整个数据结构的总共有0x12个成员。
继续往下
这里将ecx+4,数据窗口跟随查看一下ecx,这种连续的地址明显是一个数组。ecx是数组首地址。这个数组没有用最常见的的[eax+ecx*4]的方式进行遍历,而是用首地址一直+4的方式来遍历整个数组。
再回到之前的偏移表达式
这里ecx来自于[edi+0x4],[edi+0x4]就是数组首地址
基址=[[edi+0x4]]+0x8
这里就要修改一下这个偏移表达式了
基址=[[edi+0x4]+i*0x4]+0x8
接下来确定数组下标
在循环跳出条件的地址下断,观察edx的值,此时edx等于4
当下标为4时,这个结构体数组指向我们要找的标志位
基址=[[edi+0x4]+4*0x4]+0x8
继续往上追edi
edi来自[esi+0x4]
基址=[[[esi+0x4]+0x4]+4*4]+0x8
往上找esi
esi来自ecx
基址=[[[ecx+0x4]+0x4]+4*4]+0x8
返回上层函数追ecx
ecx来自edi
edi又来自ecx,返回上层追ecx
ecx来自eax,进到上面的call追eax
这里我们看到eax来自于一个基址[0x6B706198],到这里,禁止更新的基址就找完了。
分析通用设置数组
接着我们来分析一下整个结构体数组
[[[[0x6B706198]+0x4]+0x4]+i*4]+0x8
整个表达式可以拆分为下面几部分
数组首地址=[[0x6B706198]+0x4]+0x4 数组下标=i*4 偏移=0x8
首先来观察数组的首地址,0x2B32A58就是整个通用设置结构体数组的首地址,下面的0x12是数组成员个数。数据窗口跟随
这里是结构体数组,每一个成员都是一个结构体。再观察下标为4的表达式内容
[[[[0x6B706198]+0x4]+0x4]+4*4]+0x8
这里的值为0x69,正好是循环的结束条件,这个应该是类似功能ID之类的唯一标识。另外每一个下标都对应不同的通用设置,这里列出部分
i=2:开启新消息提醒声音 i=3:开启语音和视频通话提醒声音 i=4:有更新时自动升级微信 i=5:热键与其他冲突时提醒 i=6:适用系统缩放比例
这里还会碰到一个很玄学的问题,每台电脑的偏移不一样,比如i=4在我这里是有更新时自动升级微信,在另外一台机器上可能是i=7的时候是这个功能设置。
随机的数组下标
想要解决这个问题,就要回顾之前的代码
这一块是整个数组的遍历代码,所有的通用设置都会走这段代码,当勾选开启语音和视频通话提醒声音时,这个功能ID为0x68
0x68:开启新消息提醒声音 0x172:开启语音和视频通话提醒声音 0x69:有更新时自动升级微信 0x6D:保留聊天记录
所以修改通用设置的关键并不是数组下标对应的标志位,这个数组下标是随机的。关键在于功能ID对应的标志位,有点类似Key->Value的组合
功能ID:[[[[0x6B706198]+0x4]+0x4]+i*4]+0x4 标志位:[[[[0x6B706198]+0x4]+0x4]+i*4]+0x8
如果想要修改对应的通用设置,就要先比对功能ID,然后修改ID对应的标志位。到这里,整个通用设置算是分析完成了。
最后 附Github地址:https://github.com/TonyChen56/WeChatRobot
-
ReadLater:这是Google Chrome扩展程序,用于保存链接以供以后阅读-源码
2021-01-30 04:40:54阅读后 变更记录: 4.03 支持与2.0.1之前保存的URL的向后兼容性 4.0.2 修复了UI中关于检查有效syncItem的重大更改。... 单击显示开发人员模式的右上角的复选框。 现在点击加载解压扩展程序... 选择您解压缩Read -
jsp应用实例-网上答题评测系统
2017-09-29 21:52:51如今。采用网上考试并实现自动评阅已经成为一种趋势。本案例需设计两个页面:一个是提交信息页面,另一...对于复选框,可多选列表框,需专递多个参数,通过数组保存并获取参数。 提交信息页面程序: 简单的网上试题如今,采用网上考试并实现自动评阅已经成为一种趋势。本案例需设计两个页面:一个是提交信息页面,另一个是获取提交信息处理并显示页面。
设计关键:1.对于互斥的单选框,只允许单选的列表框,只专递一个参数。
2.对于复选框,可多选列表框,需专递多个参数,通过数组保存并获取参数。
提交信息页面程序:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>简单的网上试题自动测评系统</title> </head> <body> <form action="show0317.jsp" method="post"> 一. 2+3=?<br> <input type="radio" name="r1" value="2" checked="checked">2 <input type="radio" name="r1" value="3">3 <input type="radio" name="r1" value="4">4 <input type="radio" name="r1" value="5">5<br> 二. 下列哪些是偶数?<br> <input type="checkbox" name="c1" value="2">2 <input type="checkbox" name="c1" value="3">3 <input type="checkbox" name="c1" value="4">4 <input type="checkbox" name="c1" value="5">5<br> 三.下列哪些是动态网页?<br> <select size="4" name="list1" multiple="multiple"> <option value="asp">ASP</option> <option value="php">PHP</option> <option value="htm">JSP</option> <option value="jsp">HTML</option> <option value="xyz" selected="selected">xyz</option> </select><br> 四.下列组件哪些是服务器端的?<br> <select size="1" name="list5"> <option value="jsp">JSP</option> <option value="servlet">SERVLET</option> <option value="java">JAVA</option> <option value="jdbc">JDBC</option> </select><br> 五.在服务器端接受用户请求的对象是: <input type="text" size="20" name="text1"><br> <div align="left"> <blockquote> <input type="submit" value="提交" name="button1"> <input type="submit" value="重置" name="button2"> </blockquote> </div> </form> </body> </html>
获取提交信息并处理显示程序:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>测评结果显示</title> </head> <body> <% String s1=request.getParameter("r1"); if(s1!=null){ out.println("一. 解答为2+3="+s1+" "); if(s1.equals("5")) out.println("正确"+"<br>"); }else out.println("一.没有解答!"); out.println("-------------------<br>"); String[] s21=request.getParameterValues("c1"); if(s21!=null){ out.println("二.解答为:偶数有:"); for(int i=0;i<s21.length;++i){ out.println(s21[i]+" "); } if(s21.length==2&&s21[0].equals("2")&&s21[1].equals("4")){ out.println("正确!"+"<br>"); }else{ out.println("错误!"+"<br>"); } }else{ out.println("二.没有解答"); out.println("-------------<br>"); } String[] s31=request.getParameterValues("list1"); if(s31!=null){ out.println("三. 解答为:动态网页有:"); for(int i=0;i<s31.length;++i){ out.println(s31[i]+" "); } if(s31.length==3&&s31[0].equals("sap")&&s31[1].equals("php") &&s31[2].equals("jsp")) out.println("正确!"+"<br>"); else out.println("错误!"+"<br>"); }else out.println("三,没有解答"); out.println("-----------<br>"); String s4=request.getParameter("list5"); if(s4!=null){ out.println("四,解答为:服务器端的组件有:"); out.println(s4+" "); if(s4!=null&&s4.equals("servlet")) out.println("正确!"+"<br>"); else out.println("错误!"+"<br>"); }else out.println("四,没有解答"); out.println("----------------<br>"); String s5=request.getParameter("text1"); if(s5!=null){ out.println("五,解答为:"); out.println(s5+" "); if(s5!=null&&s5.equals("request")) out.println("正确!"+"<br>"); else out.println("错误!"+"<br>"); }else out.println("五,没有解答"); out.println("------------------<br>"); %> </body> </html>
试题界面:测评结果界面:
-
通过嵌套 Struts 标记 和 创建单选按钮组
2006-06-24 16:39:00在这篇文章中,我将介绍通过嵌套 Struts 标记 和 创建单选按钮组。然后我用一个特定的表单 bean 指向这个标记并对保存单选按钮值的 String[] ...五步诀窍为了简单起见,我用与上次在动态复选框中使用的相同工作示例来演 -
用Struts实现动态单选按钮
2005-12-09 09:13:00这个诀窍跟在我上一篇文章 “Struts 的动态复选框” 之后。像动态复选框一样,带有动态选择元素的单选按钮可以给 Web 页面添加许多麻烦,而使用 Struts,也可以很容易地创建它们。在这篇文章中,我将介绍通过嵌套 ... -
PHP获取表单数据与HTML嵌入PHP脚本的实现
2021-01-20 01:16:36php接受通过HTML表单提交的信息时,会将提交的数据保存在全局数组中,我们可以调用系统特定的自动全局变量数组来获取这些值。 常用的自动全局变量如下所示: 1、GET方式 ...复选框 、列表框(名称采用 -
Thinkphp下的RABC Role的显示和修改
2015-05-09 13:50:12把许多复选框的权限表单的信息收集起来保存到角色的数据表中——具体实现方法 在表单中创建一个数组name = auth_name[] value = assign过去auth_id 在修改ACtion中,收集起来,在RoleModel中创建相应的方法... -
Java经典编程300例(code)
2013-01-09 10:26:53实例036 通过复选框控件数组实现 添加多个复选框控件 52 实例037 使用选择排序法对数组排序 53 实例038 使用冒泡排序法对数组排序 55 实例039 使用快速排序法对数组排序 57 实例040 使用直接插入法对数组排序 59 ... -
程序天下:JavaScript实例自学手册
2018-07-08 12:59:5510.7 单击任意单元格都能自动选中复选框 10.8 调用复选框后面的文字 10.9 两个checkbox互斥问题 10.10 使用checkbox控制文本框 10.11 选中表格行前的复选框则行变色 10.12 用JavaScript生成面包屑导航 10.13 复选框... -
Excel VBA实用技巧大全 附书源码
2010-10-08 18:59:2404132通过数组向单元格区域一次性输入数据 04133向单元格区域输入连续值 04134向单元格区域输入连续的日期 04135向单元格区域输入连续的字符 04136向单元格输入公式(A1格式) 04137向单元格输入公式(R1C1格式) ... -
《Java开发实战1200例(第I卷)》(李钟尉.陈丹丹).part2 高清完整PDF版
2016-06-13 15:53:27实例048 复选框控件数组 实例049 用数组反转字符串 3.3 数组排序与查询 实例050 使用选择排序法 实例051 使用冒泡排序法 实例052 使用快速排序法 实例053 使用直接插入法 实例054 使用sort方法对数组进行... -
《Java开发实战1200例(第I卷)》(李钟尉.陈丹丹).part3 高清完整PDF版
2016-06-13 16:11:24实例048 复选框控件数组 实例049 用数组反转字符串 3.3 数组排序与查询 实例050 使用选择排序法 实例051 使用冒泡排序法 实例052 使用快速排序法 实例053 使用直接插入法 实例054 使用sort方法对数组进行... -
Visual C++开发实战1200例(第1卷).(清华出版.刘锐宁.梁水.李伟明).part1
2016-06-16 01:35:39实例338 使树视图控件具有复选功能 实例339 树控件的服装设计 实例340 显示磁盘目录 7.11 标签控件 实例341 界面的分页显示 实例342 标签中的图标设置 7.12 时间控件 实例343 迷你星座查询器 实例344 设置... -
Visual C++开发实战1200例(第1卷).(清华出版.刘锐宁.梁水.李伟明).part2
2016-06-16 01:38:19实例338 使树视图控件具有复选功能 实例339 树控件的服装设计 实例340 显示磁盘目录 7.11 标签控件 实例341 界面的分页显示 实例342 标签中的图标设置 7.12 时间控件 实例343 迷你星座查询器 实例344 设置... -
Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3
2016-06-12 11:39:31实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 实例050 使用选择排序法 61 实例051 使用冒泡排序法 62 实例052 使用快速排序法 64 实例053 使用直接插入法 65 实例054 使用sort方法... -
Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part1
2016-06-12 11:34:39实例048 复选框控件数组 59 实例049 用数组反转字符串 60 3.3 数组排序与查询 61 实例050 使用选择排序法 61 实例051 使用冒泡排序法 62 实例052 使用快速排序法 64 实例053 使用直接插入法 65 实例054 使用sort方法... -
精通javascript
2012-12-05 18:17:352.选择浏览器的“工具”-“安全”-“本地Intranet”-“自定义级别”-“活动脚本”中选用“禁用”单选框 3.在浏览器中输入下述地址:http://localhost/1.2.htm • 1.1.htm 多段代码相互调用 • 1.2.... -
《C#经典编程220例》.(明日科技).【带书签】-共3部分
2016-08-02 17:04:42实例108 实现带复选框的treeview控件 177 实例109 将xml文件节点绑定到treeview控件中 178 实例110 修改treeview控件的节点文本 179 第11章 c#面向对象高级技术 181 实例111 利用接口实现选择不同的语言 182 实例112... -
LINQPad Premium 5.36.03 (Any CPU)
2018-12-11 08:33:26在SQL连接对话框,当您选择“显示在TreeView中所有数据库”选项,一个复选框,现在看来可以让你选择是否要自动填充在启动数据库列表。 (F#)使用类供应商,LINQPad现在可以正确地逃脱在自动完成列表成员名称空间。... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part3
2016-06-21 21:11:3854 理解字符串作为char类型的数组 55 代码注释 第五章 文件——基本类型 56 Visual C++IDE使用的文件类型 57 理解文本文件和文档文件 58 创建并使用源文件 59 创建并使用头文件 60 使用保护:避免头文件多次被包含 ... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part4
2016-06-21 21:13:2754 理解字符串作为char类型的数组 55 代码注释 第五章 文件——基本类型 56 Visual C++IDE使用的文件类型 57 理解文本文件和文档文件 58 创建并使用源文件 59 创建并使用头文件 60 使用保护:避免头文件多次被包含 ... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part1
2016-06-21 21:05:5454 理解字符串作为char类型的数组 55 代码注释 第五章 文件——基本类型 56 Visual C++IDE使用的文件类型 57 理解文本文件和文档文件 58 创建并使用源文件 59 创建并使用头文件 60 使用保护:避免头文件多次被包含 ... -
Visual C++程序员实用大全(精华版).(水利水电.邓劲生.张晓明译).part2
2016-06-21 21:09:5454 理解字符串作为char类型的数组 55 代码注释 第五章 文件——基本类型 56 Visual C++IDE使用的文件类型 57 理解文本文件和文档文件 58 创建并使用源文件 59 创建并使用头文件 60 使用保护:避免头文件多次被包含 ... -
Visual Basic开发实战1200例(第Ⅰ卷).(清华出版.孙秀梅.巩建华).part1
2016-06-14 11:19:42实例333 删除列表框中的复选数据 实例334 快速选中ListBox中的全部条目 实例335 列表中拒绝添加重复信息 实例336 移动列表中项目到另一个列表 实例337 将数据库中的数据表添加到列表中 实例338 将表中数据添加... -
77G 22套C语言 C++ 数据结构 程序设计视频课程合集 C丨C++相关学习视频全套视频教程
2018-11-16 12:40:3539.MFC_对话框_复选框_单选钮.mp4 4.MFC_消息映射.mp4 40.MFC_模态对话框.mp4 41.MFC_非模态对话框.mp4 42.MFC_属性表.mp4 43.MFC_公用对话框.mp4 44.MFC_数组类-1.mp4 45.MFC_数组类-2.mp4 46.MFC_CArray.... -
Excel_VBA教程
2014-09-22 11:36:349.复选框 201 10.切换按钮 201 11.列表框 201 12.复合框 201 13.滚动条 201 14.旋转按钮 201 15.图像 201 16.多页控件 202 17.TABSTRIP控件 202 18.REFEDIT控件 202 19.在窗体上放置控件 202 20.应用程序示例1:信息... -
PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1
2016-06-14 01:25:19实例173 实现复选框中的全选、反选和不选 208 实例174 隐藏域提交用户的ID值 210 实例175 图像域替代提交按钮 211 实例176 跳转菜单实现页面跳转 213 实例177 上传图片预览 214 实例178 去掉下拉选项的边框 215 实例... -
PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2
2016-06-14 01:27:23实例173 实现复选框中的全选、反选和不选 208 实例174 隐藏域提交用户的ID值 210 实例175 图像域替代提交按钮 211 实例176 跳转菜单实现页面跳转 213 实例177 上传图片预览 214 实例178 去掉下拉选项的边框 215 实例...