procedure TForm1.FormCreate(Sender: TObject);const
  Names: array[0..5, 0..1] of string = (
    ('Rubble', 'Barney'),
    ('Michael', 'Johnson'),
    ('Bunny', 'Bugs'),
    ('Silver', 'HiHo'),
    ('Simpson', 'Bart'),
    ('Squirrel', 'Rocky')
    );var
  I: Integer;
  NewColumn: TListColumn;
  ListItem: TListItem;
begin
  with ListView1 do
  begin
    ViewStyle := vsReport;
    NewColumn := Columns.Add;
    NewColumn.Caption := 'Last';
    NewColumn := Columns.Add;
    NewColumn.Caption := 'First';    for I := Low(Names) to High(Names) do
    begin
      ListItem := Items.Add;
      ListItem.Caption := Names[I][0];
      ListItem.SubItems.Add(Names[I][1]);
    end;
  end;
end;procedure TForm1.ListView1Click(Sender: TObject);
begin
if listview1.Selected.Focused=true then
edit1.Text :=listview1.Items[listview1.Selected.Index].Caption
else
Exit;
end;问题:运行以上程序时,点击listview的空白行处就会出错。谁知道是怎么回事啊??请帮忙解决,一定给分,谢谢了。

解决方案 »

  1.   

    原因是点击空白处时ListView1.Selected = nil
    这样
      if (listview1.selected <> nil) and (listview1.Selected.Focused=true) then
        edit1.Text :=listview1.Items[listview1.Selected.Index].Caption
    else
    Exit;建议放在
    ListView1的OnChange里写procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    begin
      if ListView1.Selected <> nil then
        edit1.Text :=listview1.Items[listview1.Selected.Index].Caption
    end;
      

  2.   

    在begin之后添加下面这一句试试看
    if ListView1.Selected = nil then Exit;
      

  3.   

    只要在ListView1Click添加:
    if listview1.ItemIndex>=0 then
    begin
    .......
    end;
    就可以了。
      

  4.   

    if ListView1.Selected <> nil then我以前在碰到过,用这个就可以了!