移动数据感应(Dataware)的VBX网格控件当前行
编号:QA000015
建立日期: 1998年2月1日 最后修改日期:1998年2月1日
所属类别:
Peter Zhu:
我在Visual Basic 4.0 16位环境中使用数据感应(Dataware)的VBX网格控件(如FarPoint公司的Spread 2.5或Sheridan公司的DataGrid 1.0e),发现在执行Data1.recordset.findfirst "ID=10"时,该控件的当前行并不跳转到ID=10的那一行上去,而如果把VBX控件换成OCX控件则不存在此问题,或者在Visual Basic Pro 3.0 环境中使用以上的VBX控件,执行同样命令,也不存在问题。这是怎么回事?
回答:
你所说的情况确实存在。Visual Basic在执行Data1.RecordSet.FindFirst "ID=10"后要向VBX发送一条VBM_DATA_REQUEST消息,最初,我怀疑Visual Basic没有发出这条消息,但实际情况是发出了,这一点我用VBTools v5.0的几个数据感应控制验证了。那么, 我认为可能性最大的原因是Visual Basic 4.0和3.0在内部数据结构方面不兼容,所以在Visual Basic Pro 3.0 环境中正常使用的VBX控件在4.0中不正常了。目前已经知道,两个版本在许多与VBX有关的方面不兼容,如Visual Basic 4.0内部的VBSetVariant函数就存在错误,Visual Basic 4.0在发送消息方面也同Visual Basic有所不同。Visual Basic 4.0对VBX控件和OCX控件的处理方法不一样,VBX控件是通过VB API同Visual Basic交换数据的,而OCX控件使用OLE API。如果你一定要在Visual Basic 4.0中使用VBX,只能使用一些特别的处理方法,如(以Spread 2.5为例):
Data1.RecordSet.FindFirst "ID=10"
Grid1.Row = Data1.RecordSet.AbsolutePosition
Grid1.Col = 0
Grid1.Action = 0 ' 设置Spread控制的当前行和列
此问题由李海回答。
| |
|
|
| |
|
|