当前位置: 代码迷 >> VFP >> []新手关于VFP的几个不能解决的有关问题
  详细解决方案

[]新手关于VFP的几个不能解决的有关问题

热度:868   发布时间:2013-02-26 00:00:00.0
[求助]新手关于VFP的几个不能解决的问题
新手请教几个问题,从网上下载了vfp的教程,做一个小工具方便自己的工作,但碰到一些问题需要大家帮帮忙解决,谢谢!
1.
如图1所示,
表单显示的是table "repair"表的内容,想实现一个功能,就是,在文本框"re_bu"输入bu_code后,在文本框右边的标签栏lable上显示bu表中对应的bu_desc字段,而且在保存后,浏览表单时,每笔repair记录都能显示实际对应的bu_desc(即能实时刷新),请问这个应该如何实现呢? 试了一些方法,但无法在保存后能随着浏览而实时刷新lable1。

2.
怎么实现,在文本框输入的英文字母,显示出大写字母?
即在文本框实时输入时,就算键盘上没有按下CAPS键,输入时显示在文本框中的字母是大写的。如图2
在username文本框中,输入时键盘没有按下大写键,所以文本框显示输入的也是小写字母,如何能像password那样,就算没有按下大写键,在文本框看到的也是大写的"ROOT"?

3.
表repair中,字段rp_status,这个字段两种情况: Y,N。
当rp_status=Y,将表单上的lable2的caption设为"Open",
当rp_status=N,将表单上的lable2的capton设为"Closed",
我想到了一些方法,但有些问题,就是有时不能实际反映出rp_status的值,比如rp_status=N时,lable2显示的却是"Open",如图3(图中的显示"N"只是为调试用的,实际不会显示在表单中。
请大家提供些方法。

图1

图2

图3

------解决方案--------------------------------------------------------
问题1:在TEXT1的LOSTFOCUS事件中写入代码:
SELECT AA  &&当前工作区别名
LOCATE FOR ALLTRIM(bu_code)==ALLTRIM(THIS.VALUE)
IF FOUND()
   THISFORM.LABEL1.CAPTION=bu_desc
ELSE
   RETURN MESSAGEBOX([未找到相对应的记录!])
ENDIF
THISFORM.REFRESH
至于即时显示LABEL1的CAPTION,还需要在表单上添加记录移动命令按钮,在相应的按钮中,添加适当的方法。
问题2:在TEXT1的属性中设置FORMAT=[!]即可!
问题3:[Y]与[N]在VFP中相当于逻辑值(.T.,.F.)的返回值,不能使用,换其它字母用吧!


------解决方案--------------------------------------------------------
1、设置这2个表一对多关系即可。
2、将 文本框的 InputMask 设为 U,如:文本框的 Init 事件写代码:This.InputMask='U'
这样此文本框仅允许字母表中的字符以并将它们转换为大写 (A - Z)
3、rp_status 是逻辑型,还是字符型?
------解决方案--------------------------------------------------------
1、设完一对多关系后,你移动主表记录号,从表的记录自动移到关联的字段。
如果感觉不方便就自己用代码移动从表指计
2、可以设多个U,我的目的是只能输入字母,如果还有其他字符就用1楼的方法。
3、
Select repair
thisform.rp_record_status.Caption=Iif(alltrim(UPPER(rp_status))=='Y',"Open","Closed") 
thisform.rp_record_status.ForeColor=Iif(alltrim(UPPER(rp_status))=='Y',RGB(0, 255, 0),RGB(255, 0, 0)) 
  相关解决方案