PB 中怎么通过代码控制某行的焦点

PB 中怎么通过代码控制某行的焦点,第1张

主要使用函数setrow()、selectrow()、setcolumn()、setfocus()。

//以下代码把焦点定位到第5行第3个字段:

dw_1.setfocus()//焦点切换到数据库窗口

dw_1.setrow(5)//切换当前行为第5行

dw_1.selectrow(0,false)//取消高亮显示

dw_1.selectrow(5,true)//高亮显示第5行

dw_1.setcolumn(3)//焦点移动到第3个字段

FIND() 用法:

long ll_find

ll_find = dw_2.find("yhmc="+trim(sle_1.text)+"",1,dw_2.rowcount() )

//查找dw_2中的用户名称=sle_1文本控件的值,从dw_2第一行到 最后一行,返回该行行数。

dw_2.scrolltoRow(ll_find)//设置该行为焦点,滚动到该行。

一般情况下,我们要逐条查找数据窗口中满足某一条件的记录进行处理的时候,我们的代码经常会是下面这种:

ll_findrow=dw.find(findclause,1,dw.rowcount())

do while ll_find>0

<....>

ll_findrow=dw.find(findclause,ll_findrow+1,dw.rowcount())

loop

这种写法最大的陷阱在于,PB的FIND函数在查找的时候,当参数中起始行大于终止行的时候,会从下往上进行查找,而对参数中的起始行和终止行是否有效行不作限制。

因此,一旦数据窗口中最后一条记录满足条件时,当处理完最后一条记录后,再去执行FIND的时候,由于ll_findrow+1已经大于dw_rowcount(),PB将会从ll_findrow+1行到dw.rowcount()行开始反向查找满足条件的记录,此时函数仍将返回数据窗口的最后一行,结果就导致程序进行死循环。

所以,为避免出现死循环,一般应在循环的FIND语句前判断ll_findrow是否已超出数据窗口的记录条数,超出则跳出循环。

不过,还有一种更简单的避免死循环的代码写法如下:

ll_findrow=dw.find(findclause,1,dw.rowcount())

do while ll_find>0 <....>ll_findrow=dw.find(findclause,ll_findrow+1,dw.rowcount() +1 )

loop

另外:

用法Find()函数在进行查找时区分大小写因此当应用程序在某列中查找某个值

时大小写匹配的行才是找到的行。

当应用程序使用循环方式查找满足条件的所有行时要注意不要形成死循环下面是。

段循环查找满足指定条件行的一个示例。

long ll_find = 1, ll_end

ll_end = dw_main.RowCount()

ll_find = dw_main.Find(searchstr, ll_find, ll_end)

DO WHILE ll_find >0

... // 处理找到的行

ll_find++

// 防止死循环

IF ll_find >ll_end THEN EXIT

ll_find = dw_main.Find(searchstr, ll_find, ll_end)

LOOP 


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11667709.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存