Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7804|回复: 4

关于callback的curValue类问题

[复制链接]
发表于 2013-6-3 23:37:28 | 显示全部楼层 |阅读模式
前两天写一段代码,一个form,包含两个REALFILLIN,和几个按钮如下所示:
1.jpg
用case函数取两个块内的数值
case(form->curField
        ("oldwidth"     a =form-> curValue)
        ("newwidth"   b = form->curValue)
);case
从语法上理解,光标在oldwidth时,’oldwidth 变量有效,那么a可以得到其输入的值。同理,
光标在newwidth时,自然会得到变量newwidth的值,那么会赋给b。
但问题出现了,当输入完oldwidth时,a的值也得到了,再去取b的值时,此时的a值为nil,那么
a =form-> curValue赋值表达式无效了。或者newwidth输入完,输入oldwidth时,也会出现b变为nil的
现象。
怀疑是此时的赋值表达式是赋个地址,所以尝试用copy函数,和转成symbol再转成数值都无济于事,
于是请教 vivuo,他给的解释是用axlFormGetField(form “value”)试试。
第二天在case函数体内试了一下,发现此类现象还存在,于是干脆不用赋值给新变量直接把axlFormGetField(form “value”)
当做变量,问题解决。
这段代码很坎坷,后来加了Transaction函数(因代码是改变dbid的操作),同时此时将默认的按钮关掉,即ok和cancel用来
确认和撤销,但是问题来了,当执行完操作后会习惯性的done一下,但改好的东西又变回去了,只有点ok按钮一下才可以,这事奇怪的很,在不带form的代码中没有此类现象。

特此将此经历写下给有同样困惑的同学一个参考,也希望有擅长这类问题的朋友提提解决办法。多谢vivuo给的支持,根本问题都帮助解决了,也给自己留点问题琢磨。


 楼主| 发表于 2013-6-5 19:46:32 | 显示全部楼层
子木 发表于 2013-6-4 23:03
case函数不是当前面一个为真就自动舍弃其他的吗?

对的,我不需要同时得到两个realfillin的值,用case可以先后得到两个realfillin的值,这样用是没问题的。
发表于 2013-6-16 08:10:03 | 显示全部楼层
本帖最后由 lispskill 于 2013-6-16 08:11 编辑

我不知道你说一大堆想干什么 ,就告诉你我怎么做的吧:
case(form->curField
        ("oldwidth"   
            if( form->curValue then
                a =form-> curValue
             );if
       );oldwidth
     );case
就是这样:避免控件失去焦点的事件被激发
if( form->curValue then
     ;something you want to do
);if
 楼主| 发表于 2013-6-16 11:07:39 | 显示全部楼层
lispskill 发表于 2013-6-16 08:10
我不知道你说一大堆想干什么 ,就告诉你我怎么做的吧:
case(form->curField
        ("oldwidth"   

我表达确实有问题。看来我遇到的问题比较奇怪。您给的代码是比较严谨的处理方法,谢谢指正。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-11-23 20:00 , Processed in 0.158482 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表