在itemchanged事件中发现的奇怪现象,谁能帮偶看看为什么?

nthb2001 2003-08-30 05:01:45
在itemchanged 事件中偶写了如下代码:

string rec_id
int rec_id_num
this.accepttext()
if this.getcolumnname() = 'plan_id' then
rec_id = this.object.plan_id[getrow()]

if isnull(rec_id) then rec_id = '0'

rec_id_num = long(rec_id) + 1

choose case len(string(rec_id_num))
case 1
rec_id = '000000' + string(rec_id_num)
case 2
rec_id = '00000' + string(rec_id_num)
case 3
rec_id = '0000' + string(rec_id_num)
case 4
rec_id = '000' + string(rec_id_num)
case 5
rec_id = '00' + string(rec_id_num)
case 6
rec_id = '0' + string(rec_id_num)

case 7
rec_id = string(rec_id_num)

end choose

this.object.plan_id[getrow()] = rec_id

end if



在这个DW中还有其它事件:如下:

pbm_dwnpressenter 事件

IF THIS.GETCOLUMN()=LONG(THIS.OBJECT.DATAWINDOW.COLUMN.COUNT ) THEN
tab_1.tabpage_2.dw_3.setfocus()
end if

一个是

pbm_dwnkey 事件

GRAPHICOBJECT cb_control//定义环境变量
CHOOSE CASE KEY
//CASE KEYRIGHTARROW!////按光标右键右移焦点
//keybd_event (9,0,0,0)
//keybd_event(9,0,2,0)
CASE KEYDOWNARROW!////按光标下移键右移焦点
keybd_event(9,0,0,0)
keybd_event(9,0,2,0)
//CASE KEYLEFTARROW!////按光标左键左移焦点
//keybd_event(16,0,0,0)
//keybd_event(9,0,0,0)
//keybd_event(16,0,2,0)
//keybd_event(9,0,2,0)
CASE KEYUPARROW!////按光标上移键左移焦点
keybd_event(16,0,0,0)
keybd_event(9,0,0,0)
keybd_event(16,0,2,0)
keybd_event(9,0,2,0)
//CASE KEYENTER!////按回车键触发焦点处控件
//cb_control=GETFOCUS()
//IF TYPEOF(cb_control)=COMMANDBUTTON!THEN
//TRIGGEREVENT(cb_control,clicked!)
//END IF
END CHOOSE



但是在itemchanged事件中发现了一个奇怪现象,,


this.object.plan_id[getrow()] = rec_id这句也执行成功了,只是最后不知为什么又回复成原来的样子了,,,

请各位高手给个解决办法
...全文
57 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
netspies 2003-09-01
  • 打赏
  • 举报
回复
up

请大家看看下面问题

http://expert.csdn.net/Expert/topic/2198/2198945.xml?temp=.6973535
tulip2108 2003-08-31
  • 打赏
  • 举报
回复
return 2应为return 0
写错了,对不起。
0 (Default) Accept the data value
1 Reject the data value and don't allow focus to change
2 Reject the data value but allow the focus to change

ILYF 2003-08-31
  • 打赏
  • 举报
回复
同意 946(情系会计) ,改成

THIS.Post setitem(row,'plan_id',ls_rec_id)
RETURN 0

即可。

还有在 Itemchanged 事件中使用 AcceptText 函数是没有效果的。帮助中有说明。
jdsnhan 2003-08-31
  • 打赏
  • 举报
回复
to tuliplangel

ls_rec_id=String(li_rec_id_num, "0000000")
this.setitem(row,'plan_id',ls_rec_id)
return 2 //接受改变的数据
return 2不是接受改变的数据,恰恰相反,是拒绝接收数据,但允许改变焦点
946 2003-08-31
  • 打赏
  • 举报
回复
this.setitem(row,'plan_id',ls_rec_id)
改成
post setitem(row,'plan_id',ls_rec_id)
houcy74 2003-08-31
  • 打赏
  • 举报
回复
你可以查itemchanged 函数 有几个返回值代表不同的处理,要选择一个合适的返回值:
接受数据,且可以改变焦点

拒绝接收数据,但允许改变焦点

拒绝接收数据,不允许改变焦点
tulip2108 2003-08-30
  • 打赏
  • 举报
回复
//参考代码
string ls_rec_id
int li_rec_id_num
this.accepttext()
choose case dwo.name
case 'plan_id'
if isnull(data) or trim(data)='' then
li_rec_id_num =1 //加1什么意思,不理解
else
if not isnumer(data) then
messagebox("提示","请输入数值")
return 1// 焦点不移开,重输
end if
li_rec_id_num=long(data)+1 //加1什么意思,不理解
end if
ls_rec_id=String(li_rec_id_num, "0000000")
this.setitem(row,'plan_id',ls_rec_id)
return 2 //接受改变的数据
end choose
nthb2001 2003-08-30
  • 打赏
  • 举报
回复
to:jdsnhan

谢谢

to:白兔

谢谢你的代码,偶怎么就没想到呢,,

在itemchanged中赋值,赋值是不会触发itemchanged事件的,所以是不会循环触发的
jdsnhan 2003-08-30
  • 打赏
  • 举报
回复
不会循环触发,是不执行。
klbt 2003-08-30
  • 打赏
  • 举报
回复
首先,代码有些啰嗦了,建议把下面的代码:
---------------------------------------------------------------------------
choose case len(string(rec_id_num))
case 1
rec_id = '000000' + string(rec_id_num)
case 2
rec_id = '00000' + string(rec_id_num)
case 3
rec_id = '0000' + string(rec_id_num)
case 4
rec_id = '000' + string(rec_id_num)
case 5
rec_id = '00' + string(rec_id_num)
case 6
rec_id = '0' + string(rec_id_num)

case 7
rec_id = string(rec_id_num)

end choose
----------------------------------------------------------------------------
修改为:rec_id = String(rec_id_num, "0000000")
----------------------------------------------------------------------------
其次,你在ItemChanged事件赋值,做法很奇怪,修改的列名是plan_id,最终赋值还是该列,是否会循环触发?为何不写在按钮或其它事件中?
jdsnhan 2003-08-30
  • 打赏
  • 举报
回复
偶在那个帖子里回答了,此处复制一下 :)
楼主,偶有几个地方不明白,说出来莫怪
1、为什么要用getcolumnname() ,而不用本身的dwo.name
2、为什么要用gerrow(),而不用本身的row
3、为什么非要这样赋值呢?
解决你的问题:
在this.object.plan_id[getrow()] = rec_id 后面
this.settext(string(rec_id))
return 2
这时要对当前编辑控件中的重置
别忘了加 return 2

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧