为了动态的向DBGRID1.COLUMNS[dbgrid1.selectcolumnsindex].PICKLIST添加下拉项,在DBGRID1.COLENTER事件里写下下面的语句:procedure form1.dbgrid1colenter(sender:tobject);
begin
     picklistadddata(dbgrid1.selectcolumnsindex);   //这是一个自定义过程,过程内容如下:
end;
procedure form1.picklistadddata(intcase:integer);
var
   i:integer;begin
if intcase=1 then
   begin
   for i=0 to dbgrid1.columns[1].picklist.count-1 do
       dbgrid1.columns[1].picklist.delete(i);
   
   dbgrid1.columns[1].picklist.add('你好') ;
   
   end;
if intcase=2 then
   begin
for i=0 to dbgrid1.columns[1].picklist.count-1 do
       dbgrid1.columns[1].picklist.delete(i);
   
   dbgrid1.columns[1].picklist.add('你好吗') ;
      
   end;    
end;上述语句在运行过程中,在两列之间多来回几次就出现LIST OUT OF BOUNDS 这样的错误提示。
不知道原因在哪儿?请高手帮帮忙!
  

解决方案 »

  1.   

    上面有一个地方我这儿写错了,纠正一下
    if intcase=2 then 
      begin 
    for i=0 to dbgrid1.columns[1].picklist.count-1 do 
          dbgrid1.columns[1].picklist.delete(i); 
      
      dbgrid1.columns[1].picklist.add('你好吗') ; 
          
      end;   
    应该是colunmn[2]这个是我这儿写错的。
      

  2.   

    要把for循环改成这样:
    for i := DBGrid1.Columns[1].PickList.Count - 1 downto 0 do
      //干你的事
      

  3.   


    dbgrid1.columns[1].picklist.delete(i(*注意这个I的值,看是否超出picklist的范围*)); 
    dbgrid1.columns[2].picklist.delete(i(*注意这个I的值,看是否超出picklist的范围*)); 
      

  4.   

    要把for循环改成这样: 
    for i := DBGrid1.Columns[1].PickList.Count - 1 downto 0 do 
      //干你的事上面的语句和我的语句应该是没有什么区别呀:
    or i=0 to dbgrid1.columns[1].picklist.count-1 do
    dbgrid1.columns[1].picklist.delete(i(*注意这个I的值,看是否超出picklist的范围*)); 
    dbgrid1.columns[2].picklist.delete(i(*注意这个I的值,看是否超出picklist的范围*)); 
    I的取值范围就在0到dbgrid1.columns[1].picklist.count-1,怎么会超出范围呢请上面两位大侠说详细一点好吗?我的语句在执行过程中,开始还正常,一会儿就会提示list index out of bounds(1)这样的错误的。
      

  5.   

    有delete的话,I(count)值时刻在变喔