我使用ADVStringGrid控件,比如有5列,其中第3列是不显示给界面上的,所以我设置了宽度为0,并且不能编辑。而且切换回车会自动跳到下一个单元格,直接进入编辑状态。
现在的问题是,我从第2列按下回车,会自动跳转到地4列,但是在OnCellChanging事件的参数中,OldCol,NewCol两个数值,不是我想要的OldCol=1,NewCol=3,而是OldCol=2,NewCol=3!!!
我的程序就是根据OldCol做判断的,这样的话,我的判断就错位了!我设置第3列为fixCol也不行,也不是我想要的2,这是为什么?如何才能获取正确的OldCol?

解决方案 »

  1.   

    上面最后一句写错了,我想要的是OldCol=1,而不是2
      

  2.   

    跳过列3,相当于是2到3,3自动到4程序就是根据OldCol做判断的,加一个逻辑,如果oldcol是3,其实就是2
      

  3.   

    因为你调到第三列其实是从第二列跳过去的,所以OldCol中记载的还是那个隐藏列的值,所以你读取大于隐藏列后的列时,这个OldCol就要处理一下了,比如取OldCol-1
      

  4.   

    真是麻烦,为什么我当前的第一列的onchanging事件就没有了?
      

  5.   

    单击当然会是正确的,键盘操作的话,之所以不正确,前面的人已经回答了。
    advstringAGrid我不了解,隐藏栏位是不是有其他更正确的方法,而不是设定width;比较笨的办法是,在此控件keydown事件中自己去控制cell焦点移动,比如可以判断,当焦点在第二列,且key=vk_return,则直接focus到第四列。——或者使用此法有其他问题?
      

  6.   

    楼上的方法我都试验过
    如果使用hide方法,则col的索引就不正确了,
    如果控制enter的话,同一行没问题,如果跨行就有问题了,因要设置grid.col和grid.row,所以执行了两次changing事件,不是一次的结果
      

  7.   

    "如果使用hide方法,则col的索引就不正确了,"
    ——是不是隱藏的col沒有進入索引范圍?若一定要知道隱藏的col,或可通過其他標志判斷(比如設置tag)
    "如果控制enter的话,同一行没问题,如果跨行就有问题了,因要设置grid.col和grid.row,所以执行了两次changing事件,不是一次的结果"
    ——1、先設置grid.col,然后再設置grid.row;
        2、聲明一個全局變量如CurrColIndex,在OncellChanging中用于記錄NewCol,判斷兩個值不一樣時,則進入判斷體內執行,如:
        if CurrColIndex<>NewCol then
       begin
         CurrColIndex := NewCol; 
         ...
       end; 
       這樣可避免OncellChanging里面計算動作被執行兩次。
       不知這樣是否可以滿足你的要求?