注册 登录
编程论坛 VFP论坛

一个图片显示的问题

总是出错 发布于 2021-05-17 22:47, 1764 次点击
在某A表单运行后,感觉还可以把单据图片显示出来。于是在目录中添加了一个图片文件夹用于存放单据图片
然后又建立了一个地址表B,二个字段,一个文字型,用来存放图片地址(绝对路径),一个数据型和A表ID关联,在A表单上增加一个按钮,用以调用B表单(图片显示)。
另创建B表单,专门显示图片。
按钮代码如下
PUBLIC nID ,C图片地址



SELE A表
 nID=ID
 SELE B表
 LOCATE FOR A表ID=nID
 IF Found()
  c图片地址=alltrim(B表.地址)
   DO FORM  C:**\B表单图片显示
  else
  =messagebox('本记录无单据.',0+48+0,'提示')
endif
  B表单只有二个个控件,IMAGE1和退出按钮
 在B表单的属性ACTIVATE EVENT 写入代码如下:

if empty(c图片地址)=.f.
   thisform.image1.picture=c单据地址
  endif
 thisform.refresh
OK 运行正常。
但是几天后,添加一图片后,无法显示,呈死循环状况。表单可以显示,图片无法显示,然后死机。
开始以为是程序有问题,反复检查,没有发现问题。又以为是图片地址(路径)有误,也没有发现。
最后才发现,其它图片可以正常显示,表单也可以正常运行和退出。只有调用这张图片的时候,就出问题。
我的解决办法就是重新制作一张同名图片,放到同一地址,删除原有图片。程序运行正常。

疑惑,图片可以影响程序的运行?感觉不会。

6 回复
#2
radiofan2021-05-18 08:04
给出有问题的图片和代码,不然人家怎么帮你解决问题呀
#3
吹水佬2021-05-18 08:10
1、thisform.image1.picture=c单据地址
应该是 thisform.image1.picture=c图片地址

2、可以的话,不要放在 ACTIVATE EVENT 载入图片,否则要控制好ACTIVATE事件的事务处理,ACTIVATE事件可能会因其他事情触发出现意想不到的结果。

3、试试放在init事件处理:

SELE A表
nID=ID
SELE B表
LOCATE FOR B表.ID==nID
IF Found()
  DO FORM  C:**\B表单图片显示 WITH alltrim(B表.地址)
else
  =messagebox('本记录无单据.',0+48+0,'提示')
endif

B表单 init 事件:
LPARAMETERS c图片地址
IF FILE(c图片地址)
   this.image1.picture = c图片地址
ENDIF



#4
总是出错2021-05-18 19:15
回复 3楼 吹水佬
好的,谢谢
#5
总是出错2021-07-11 07:06
回复 3楼 吹水佬
IF Found()
  DO FORM  C:**\B表单图片显示 WITH alltrim(B表.地址)****此句没有读懂。
else
  =messagebox('本记录无单据.',0+48+0,'提示')
endif
查过帮助文件,只找到with .....endwith 的用法。单独的with 语句如何理解?可否讲解一下。谢谢!
#6
gs25367856782021-07-11 08:34
从模式表单返回需要的值
你学习一下启动表单的DO语句就明白了。

上面吹水佬是说话和软,其实代码都是写入INIT事件,很少写入ACTIVE中。

[此贴子已经被作者于2021-7-11 08:37编辑过]

#7
总是出错2021-07-11 22:01
回复 6楼 gs2536785678
谢谢!
1