2.8 KiB
2.8 KiB
title | updated | created | tags | |
---|---|---|---|---|
编辑框数据有效性判断 | 2022-03-14 07:46:12Z | 2022-01-17 02:27:09Z |
|
数据有效性判断可分为两个部分,一是对单次输入的数字判断,滤除无效字符,二是输入完毕后对整个数据进行判断,如区间检查等
过滤单个字符
在输入时限制无效字符输入
winform.plus.editBox.wndproc = function(hwnd,message,wParam,lParam){
if(message == 0x102/*_WM_CHAR*/){//对输入字符进行约束,不能识别非eng输入法状态下的输入
if(wParam >= '0'# and wParam <= '9'#){
return ;
}
destr = wParam
select(wParam) {
case '-'# {
if(min > 0){
return 1;
}
if(tmp2){
key.press(0x8/*_VK_BACK*/)
}
if(string.indexOf(ctrl.text,'-')){
ctrl.text = string.trimleft(ctrl.text,"-")
ctrl.setsel(tmp-1)
return 1;
}
else {
ctrl.text = string.concat("-",ctrl.text)
ctrl.setsel(tmp+1)
return 1;
}
}
case 'e'#, 'E'# {
if(!string.indexOf(ctrl.text,'E') and !string.indexOf(ctrl.text,'e')){
return;
}
}
case '.'# {
if(!string.indexOf(ctrl.text,'.')){
return ;
}
}
case 'g'#, 'G'# {
if(tmp2){
key.press(0x8/*_VK_BACK*/)
}
if(ctrl.text != ""){
ctrl.text = tonumber(ctrl.text) * 1e3
ctrl.setsel(-1)
}
return 1;
}
case 'm'#, 'M'# {
if(tmp2){
key.press(0x8/*_VK_BACK*/)
}
if(ctrl.text != ""){
ctrl.text = tonumber(ctrl.text) * 1e0
ctrl.setsel(-1)
}
return 1;
}
case 'k'#, 'K'# {
if(tmp2){
key.press(0x8/*_VK_BACK*/)
}
if(ctrl.text != ""){
ctrl.text = tonumber(ctrl.text) / 1e3
ctrl.setsel(-1)
}
return 1;
}
case 0x11/*_VK_CTRL*/{
if(!tmp2){
var str = string.slice(ctrl.text,tmp,tmp2);
if(#tonumber(str) == #str){
//左侧数字+1
}
}
}
}
return 1; //其余字符全部屏蔽
}
检查单次数据
在编辑框更新后判断上限有效性
case 0x300/*_EN_CHANGE*/ {
if(tonumber(owner.text) >= 1e3){//判断新数据范围
owner.text = lstValue//无效时恢复最后一次有效数据
owner.setsel(tmp)//恢复光标位置
}
lstValue = owner.text//更新最后一次有效数据
}
在失去焦点后评断下限有效性
#数据筛选