回 帖 发 新 帖 刷新版面

主题:[讨论]COMMAND的CLICK事件還有行數規定嗎?

[size=2]  今遇到一怪事.在一COMMAND的CLICK事件中用DO CASE嵌套(層數才兩層,共有22 CASE選項),當我一個一個的把CASE選項加進去時,加到第20個選項時,被報錯.其報錯的錯誤碼如下:
AA=&CNT1LJ.COMBO1.DISPLAYVALUE
BB=&CNT1LJ.COMBO2.DISPLAYVALUE
DO CASE
CASE &CNT1LJ.OPTIONGROUP1.VALUE=1   [color=FF0000]&&首先是這里報錯[/color](沒加第20個選項前這里是沒有任何錯誤的)
  DO CASE
  CASE AA=1
  
  CASE AA=2
     *
     *
     *
  CASE AA=22
  ENDC
  DO CASE
  CASE BB=1
     THISFORM.LOCKSCREEN=.T.  &&這里是一些顯示用的語句,為了一次性刷到位,暫時關閉了刷新.
     *
     *
  CASE BB=5
  ENDC
CASE &CNT1LJ.OPTIONGROUP1.VALUE=2 

ENDC
WITH &CNT2LJ.COMMANDGROUP1     [color=FF0000]&&然后就是這里報錯.[/color]
  .COMMAND1.ENABLED=.F.
  .COMMAND2.ENABLED=.F.
ENDW
THISFORM.LOCKSCREEN=.F.

RETU
  
  1.以上這一個事件大約有3000行代碼,如果我拿掉1~22個分支中的一個,其代碼可以運行.

  2.第一外報錯的地方我如果把CASE &CNT1LJ.OPTIONGROUP1.VALUE=1改成如下:
  CC=&CNT1LJ.OPTIONGROUP1.VALUE
  DO CASE
  CASE CC=1
  這里就不再報錯.

  以上請問各位朋友,是什麼原因導至呢,如果是"&"代換是問題,為何不加其中一個分支選項又不報錯呢?
 

  [/size]

回复列表 (共19个回复)

11 楼

另外,
AA=&CNT1LJ.COMBO1.DISPLAYVALUE
BB=&CNT1LJ.COMBO2.DISPLAYVALUE

DISPLAYVALUE的属性是字符串,让其
AA=1显然是不正常的
但是因为是宏替换,程序保存时不能检查出问题,但是一运行就会报错

12 楼

[quote]我建议你在这里插入
DO CASE
CASE &CNT1LJ.OPTIONGROUP1.VALUE=1

变成
Messagebox("&CNT1LJ.OPTIONGROUP1.VALUE")
DO CASE
CASE &CNT1LJ.OPTIONGROUP1.VALUE=1

你检查下宏替换后的语句是不是出了问题
使用with
endwith
只会让程序更清楚,因为重复的部分已经在with里面了,中间的部分都是必要的代码内容,一点也不重复
[/quote]

大哥,看來我們還真是有緣,我第一次想到的就是用MESSAGEBOX去測.但結果很讓人失望:MESSAGEBOX能夠正確地返回值,但一到CASE &CNT1LJ...就OVER掉了.有時甚至是VFP9.0挂掉退出了.

13 楼

[quote]另外,
AA=&CNT1LJ.COMBO1.DISPLAYVALUE
BB=&CNT1LJ.COMBO2.DISPLAYVALUE

DISPLAYVALUE的属性是字符串,让其
AA=1显然是不正常的
但是因为是宏替换,程序保存时不能检查出问题,但是一运行就会报错[/quote]


  兄弟,DISPLAYVALUE屬性可以轉換的嘛,就算未處理,程序運行時,他會報數據不匹配這個錯誤的啊.這個不是問題.

  估計是樓上所說代碼太長.我轉到PRG中,有123KB的.但是從CLICK中調用PRG,沒有任何問題啊.

14 楼

这不就清楚问题了嘛?你都知道那行出问题了,你把宏替换改成绝对引用,再报错那就是程序的问题,不报错那就是宏替的问题

15 楼

[quote]这不就清楚问题了嘛?你都知道那行出问题了,你把宏替换改成绝对引用,再报错那就是程序的问题,不报错那就是宏替的问题[/quote]

 大哥,我不是說我的疑惑在哪了嗎?不是我不知道問題出在哪,而是不知道為什麼會出這種問題.因為如果是宏的問題,為何我減少CASE,程序就OK!

16 楼

[quote][quote]这不就清楚问题了嘛?你都知道那行出问题了,你把宏替换改成绝对引用,再报错那就是程序的问题,不报错那就是宏替的问题[/quote]

 大哥,我不是說我的疑惑在哪了嗎?不是我不知道問題出在哪,而是不知道為什麼會出這種問題.因為如果是宏的問題,為何我減少CASE,程序就OK![/quote]


报错信息是什么?

17 楼

[quote][quote][quote]这不就清楚问题了嘛?你都知道那行出问题了,你把宏替换改成绝对引用,再报错那就是程序的问题,不报错那就是宏替的问题[/quote]

 大哥,我不是說我的疑惑在哪了嗎?不是我不知道問題出在哪,而是不知道為什麼會出這種問題.因為如果是宏的問題,為何我減少CASE,程序就OK![/quote]


报错信息是什么?[/quote]

多數報的是非法變量,更多的時候就是VFP挂掉退出--先是不反應,然后VFP道歉,最后退出.

18 楼

[quote][quote][quote][quote]这不就清楚问题了嘛?你都知道那行出问题了,你把宏替换改成绝对引用,再报错那就是程序的问题,不报错那就是宏替的问题[/quote]

 大哥,我不是說我的疑惑在哪了嗎?不是我不知道問題出在哪,而是不知道為什麼會出這種問題.因為如果是宏的問題,為何我減少CASE,程序就OK![/quote]


报错信息是什么?[/quote]

多數報的是非法變量,更多的時候就是VFP挂掉退出--先是不反應,然后VFP道歉,最后退出.[/quote]


Case里面的程序有问题,你是否使用了EditBox控件?VF的EditBox在某种情况下会导致程序致命错误

19 楼

基本上我都不用EDITBOX,要麼用TEXT,要麼用COMBOBOX.整個CASE里面的語句都是在處理GRID里的表.

不管了,反正我把那些代碼原封不動地搬到PRG中,就不報錯了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册