用VB6.0开发一个与数据库相关程序。用到了DataGrid控件。在鼠标点击DataGrid控件的某一列的单元格的时候在该单元格的位置上出现一个下拉列表框出现可选项目,但是下拉列表框y方向定位不准——越往下走误差越大。y方向定位用的如下方法:
dbl_y=DG_Employee.Columns(2).Top+DG_Employee.Row*DG_Employee.RowHeight + DG_Employee.Top
其中DG_Employee就是那个DataGrid控件。
哪位知道误差怎么来的?

解决方案 »

  1.   

    dbl_y=DG_Employee.Columns(2).Top+DG_Employee.Col*DG_Employee.RowHeight + DG_Employee.Top
    应该是Col,而不是Row
      

  2.   

    因为DATAGRID有1个固定行.你加上固定行的行高?
      

  3.   

    因为控件是有边框的,可以用GetSystemMetrics获得系统边框的宽度,然后再加上去就好了
      

  4.   

    怎么能是Col呢?我只在某一特定列的行上显示该ComboBox。也不是固定行引起的——固定行只有1行,不会有累积误差!GetSystemMetrics是Win32API吧?
      

  5.   

    我查不到参数nIndex的取值及其意义,能告诉我吗?
      

  6.   

    这个问题我早已经解决了!但是我还是想知道参数nIndex的取值和对应的作用,以及GetSystemMetrics的作用——我查不到。但是我用GetSystemMetrics函数时nIndex取值为2得到的返回值和我一次次尝试得到的用于补偿误差的常数一样。
      

  7.   

    这是MSDN里面的解释:
    SM_CXVSCROLL, SM_CYVSCROLL Width, in pixels, of a vertical scroll bar; and height, in pixels, of the arrow bitmap on a vertical scroll bar. 
    其中SM_CXVSCROLL = 2查API函数,在MSDN里应该查SDK的部分
      

  8.   

    用.book得到用户点了那一行,把你的东东放在这一行的.top 上就行了