chuankay 发表于 2013-6-3 23:37:28

关于callback的curValue类问题

前两天写一段代码,一个form,包含两个REALFILLIN,和几个按钮如下所示:

用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给的支持,根本问题都帮助解决了,也给自己留点问题琢磨。


chuankay 发表于 2013-6-5 19:46:32

子木 发表于 2013-6-4 23:03 static/image/common/back.gif
case函数不是当前面一个为真就自动舍弃其他的吗?

对的,我不需要同时得到两个realfillin的值,用case可以先后得到两个realfillin的值,这样用是没问题的。

lispskill 发表于 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

chuankay 发表于 2013-6-16 11:07:39

lispskill 发表于 2013-6-16 08:10 static/image/common/back.gif
我不知道你说一大堆想干什么 ,就告诉你我怎么做的吧:
case(form->curField
      ("oldwidth"   


我表达确实有问题。看来我遇到的问题比较奇怪。您给的代码是比较严谨的处理方法,谢谢指正。
页: [1]
查看完整版本: 关于callback的curValue类问题