y:=wfile.Selected.Index;
 c:=wfile.items.count-1;
 if y<>c then
  begin
   z:=y+1;
   wfile.Items.Item[z].Selected:=true;
   wfile.Refresh;
  end
 else
   begin
     exit;
   end;
移动到上一条时同样有方法是正确的,为什么向下移不行呢

解决方案 »

  1.   


      if ListView1.Selected=nil then exit;
      If ListView1.Selected.Index<ListView1.Items.Count-1 then
        ListView1.Items[ListView1.Selected.Index+1].Selected:=true;
      

  2.   

    应该首先考它的成员函数,不要自己写过程。
    下面的代码简练,正确。
    if  wfile.Selected.GetNextVisible <> nil then
      wfile.Selected.GetNextVisible.Selected := True;
    等分!!!
      

  3.   

    顺便告诉你,你错在哪里。
    y := wfile.Selected.Index; 
    指的是在同一层中的相对Index.
    如你所说的错误,应该是你的倒数第二个应该和倒数
    第一个不在同一层次,呵呵,我说的对不对。
    你可以使用
     y := wfile.Selected.AbsoluteIndex;得到它的绝对Index。
    那你的方法也就对了。不过还是使用成员函数比较好。
      

  4.   

    To:jwpl190 
    你的代碼問題很大,建議先看一下LZ的題目,他問的是ListView不是TreeView,ListView沒有GetNextVisible這一成員,呵呵
      

  5.   

    to boblaw ,
    看我改的:
     if  InRange(ListView1.ItemIndex,0,ListView1.Items.Count-2) then
       ListView1.Items[ListView1.ItemIndex+1].Selected := True;
      

  6.   

    to jwpl190:
    InRange函數使用得不錯,代碼上比我的更加簡潔,但性能上,我認為是相當的,特別是ListView1.ItemIndex,繞了幾個函數特別是虛函數,本質上還是取的ListView1.Selected.Index.
      

  7.   

    to boblaw, 
    平手。
    我认为写程序是一种创造性的艺术行为。
    力求简洁,优美。
      

  8.   

    to jwpl190 :
    同意你的观点.