今天在制作一張發(fā)貨單的過(guò)程中發(fā)現(xiàn)了一個(gè)問(wèn)題。
在發(fā)貨單的datawindow的一個(gè)checkbox復(fù)選框clicked事件中,添加如下代碼:
dw_detail.accepttext()messagebox("",row)if dwo.name="unfinished" then if dw_detail.getitemnumber(row,"unfinished")=1 then dw_detail.deleterow(row) end ifend if
發(fā)現(xiàn)datawindow的clicked的方法,在鼠標(biāo)單擊時(shí)激活事件,而不是單擊后激活事件。既:鼠標(biāo)按下-->激活事件-->鼠標(biāo)彈起-->checkbox值改變
正常情況下,或者按字面意思理解 clicked 應(yīng)該是在 鼠標(biāo)按下-->鼠標(biāo)彈起 過(guò)程結(jié)束后激活事件。之后我在PowerBuild的Window里使用控件測(cè)試Clicked事件 和在 C#的Winform里使用控件測(cè)試Click事件,均是鼠標(biāo)單擊后激活事件。
既:鼠標(biāo)按下-->鼠標(biāo)彈起-->激活事件
查看了下PB的API,里面寫(xiě)的鼠標(biāo)單擊執(zhí)行,并沒(méi)有特別聲明是單擊后,還是單擊時(shí)激活事件。產(chǎn)生的問(wèn)題:在clicked下執(zhí)行該段代碼,多行checkbox情況下,會(huì)刪除選中行后,下一行checkbox改變值,導(dǎo)致數(shù)據(jù)錯(cuò)誤。
后來(lái)分別嘗試了 getfocus(這個(gè)必須在方法中給某個(gè)字段設(shè)置焦點(diǎn)時(shí)激活) 和 editchanged(這個(gè)不捕捉checkbox值改變) 均失敗。看來(lái)只能繞過(guò)這個(gè)問(wèn)題,換其他方式解決了。
悲劇,代碼語(yǔ)言里找不到PB語(yǔ)言,但愿快點(diǎn)淘汰這玩意吧!雖然datawindow真的很好用!