图片框Image能绑定到字段吗?
常遇到有人提到vfp处理图片的问题,比如一个人员信息表,有编号、有姓名、有......,啊!还有相片。
当然一般好像总是把相片扔到某个文件夹下,表中留个字段(比如“相片”),存放对应相片的路径。
接下来往往就是“我想在表单上显示人员信息,每个人对应的相片也要同时显示在上面,我用几个按钮,‘上一个’、‘下一个’的可以翻着看”。
怎么办?最简单的就是在表单上用绑定的控件,如文本框啊、编辑框啊、单选按钮组啊....... 和字段一一绑定,这样那些按钮只管skip一下,然后thisform.refresh,那些控件里面的内容随之变化。太方便了。
但是、可是、可但是还有相片啊,好吧!用个图片框来显示,糟糕的是这家伙不能绑定字段,只能“手工”把“相片”字段中的图片路径赋值给这家伙的Picture属性。当你skip后,当前记录变了,唉!又要“手工”把“相片”字段中的图片路径赋值给这家伙的Picture属性才能更新相片。做法倒不难,按钮中skip完,接着就重新给图片框赋值呗,然后再refresh去。示例如下:
skip
thisform.image1.picture = alltrim(表.相片)
thisform.refresh
一切ok了,没有,只有你上一个、下一个的时候才有相片。还得在比如thisform.init事件中再来这么一下(给image1赋值),不然一启动窗子,张三的相片是个灰色的框,还有个叉叉,太难看鸟。
唉,好希望image1也像其他控件一样自动更新,多好。行吗?不行。真不行?就是不行,这家伙TMD就不是绑定控件嘛!
不过,我们还是可以变通一下,来个伪“绑定”。
我们把“相片”字段也和表单上一个文本框绑定起来,(这很简单,因为本身就是字符型的嘛),不过要把这个文本框隐藏起来。你大概不喜欢在上一个、下一个的时候看到一长串路径变来变去。然后,文本框的refresh方法改改
dodefault()
thisform.image1.picture = alltrim(this.value)
好了,把其他地方的类似thisform.image1.picture = alltrim(表.相片)的句子全干掉吧,清清爽爽。
这个文本框的refresh方法不需要你亲自调用,就当它不存在,当你thisform.refresh的时候,老狐狸会调用它。甚至启动窗子的时候,老狐狸也会调用它。
哈,至少从效果看来,我们绑定图片框了。