社区
PowerBuilder
帖子详情
为何itemchanged事件不触发,,??
nthb2001
2003-08-30 12:12:53
偶在DW的itemchanged事件中,对一个列的数据进行处理后再赋回新值,
在程式单步执行时成功,触发事件并得到想要的结果,
但正常执行时,就不触发事件,对事件中的任何代码都不执行,请问这是为何?有何解决办法
...全文
230
11
打赏
收藏
为何itemchanged事件不触发,,??
偶在DW的itemchanged事件中,对一个列的数据进行处理后再赋回新值, 在程式单步执行时成功,触发事件并得到想要的结果, 但正常执行时,就不触发事件,对事件中的任何代码都不执行,请问这是为何?有何解决办法
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
runsoft
2003-08-30
打赏
举报
回复
赋回新值??? 使用代码是触发不了itemchanged事件的
fyyifeng
2003-08-30
打赏
举报
回复
把你itemchanged事件里的代码贴出来看看
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
nthb2001
2003-08-30
打赏
举报
回复
这跟update没有关系吧,还有,this.getcolumnname() = 'plan_id'已执行成功呀,只是最后不知为什么会把赋入的新值还原呢?
mittee
2003-08-30
打赏
举报
回复
可能是 this.getcolumnname() = 'plan_id'问题.
用 dwo.name = 'plan_id' 试一试
或
是不是没有设update 属性阿
nthb2001
2003-08-30
打赏
举报
回复
在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
nthb2001
2003-08-30
打赏
举报
回复
现在的测试结果是这样的:
每个取值都是对的,也能触发itemchanged事件,有个奇怪的事发生了,this.object.plan_id[getrow()] = rec_id这句也执行成功了,只是最后不知为什么又回复成原来的样子了,,,
bomber2001
2003-08-30
打赏
举报
回复
用messagebox跟踪你的dwo.name就是你所说的〉:this.getcolumnname() 看看,是否正常取到值
nthb2001
2003-08-30
打赏
举报
回复
倒,。。。
to:清风
不是用代码触发,而是对列操作,改变列值,使其触发,,,
代码如下:
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
klbt
2003-08-30
打赏
举报
回复
具体描述一下过程:原来值,赋的新值... ...
PowerBuilder28个属性、35个默认
事件
、162个函数
本的执行效率 *尽量不要在RetrieveRow
事件
下编写脚本(包括注释)。 *如果数据窗口的DoubleClicked
事件
中编写了脚本,那么在数据窗口的C1icked
事件
中的脚本应该尽量短,否则双击
事件
中的脚本永远不可能得到执行。一般来说,Cliked中脚本的执行时间和两次击鼠标之间的间隔时间之和,不应该大于操作系统中所设定的鼠标双击时间间隔,否则双击
事件
永远不可能
触发
,双击时仅仅是接连两次
触发
c1icked
事件
。 *在数据窗口中录入数据时,
事件
Edit
Change
d是
触发
频率最高的,每一个按钮都
触发
该
事件
;
触发
频率仅次于该
事件
的是
Item
Change
d
事件
和
Item
Focus
Change
d,只要修改了单元中的内容,每次
触发
Item
Focus
Change
d
事件
都会
触发
Item
Change
d
事件
。在这些
事件
下编写过长的脚本会非常影响录入工作的效率。同样,
事件
RowFocus
Change
d的
触发
频率也是相当高的。一般来说是可以避免在这四个
事件
中编写脚本的。
PB调用set
item
改变数据窗口内容时,手动
触发
item
change
d
事件
调用set
item
默认不会
触发
item
change
d
事件
如果想实现可手动
触发
item
change
d
事件
事件
格式如下: dw_patinfo.event
item
change
d( /*long row*/, /*dwobject dwo*/, /*string data */) Example: dwobject ldwo_obj // 定义数据窗口对象 ldwo_obj
PB
触发
item
change
d
dwobject ldwo ldwo = idw_1.object.__get_attribute('a21',true) dw_1.event
item
change
d(idw_1.getrow(),ldwo,ls_input)
QTableWidget的
item
Change
d或cell
Change
d信号误
触发
解决方案
QTableWidget的
item
Change
d或cell
Change
d信号
触发
,在进入槽函数之后,如果槽函数中对QTableWidget的单元格执行了某些操作(如修改单元格内数据,修改单元格字体颜色等)都会再次
触发
item
Change
d或cell
Change
d信号然后去执行槽函数,会陷入无限循环。 解决方案: 1. 阻塞方法blockSignals 在进入槽函数时,进入阻塞模式,这个对象发送的信号都会被阻塞; 在退出槽函数前,解除阻塞,重新接受对象发送的信号; 返回值为之前状态的阻塞情况。 # 进入槽函数
PB
item
change
d 返回值
当数据窗口控件中某个域被修改并且该域失去输入焦点比如用户按下了Enter 键Tab 键或箭头键或用户单击了数据窗口中其他域时
触发
该
事件
返回值的意义为: 0—— 缺省返回值接收新修改的值 1——不接收新修改的值且不允许改变输入焦点 2——不接收新修改的值但允许改变输入焦点 注:
item
change
d
事件
里不要写accepttext()。 在
item
change
d
事件
里对当前字段设值时,不能使用缺省返回值。否则data最后会覆盖当前值。或者可以使用post set
Item
() 进行设值。 ...
PowerBuilder
1,077
社区成员
66,438
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章