不知道ListView有没有这个功能,名称   性别   选项
张三   男     这里有个下拉选项框,可以选择一些值
李四   男
小洪   女

解决方案 »

  1.   

    可以考虑用第三方控件,比较著名的如DevExpress的grid控件
      

  2.   

    先说明一点,本事例单击是在listview的每一次第一列出一个下拉列表框,要在其他列出现,可能要用GetCursorPos(pos);来确置了,你自己完善吧,哈哈!unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        ListView1: TListView;
        ComboBox1: TComboBox;
        procedure FormDestroy(Sender: TObject);
        procedure ListView1Click(Sender: TObject);
      private
        FComboBox: TComboBox;
        { Private declarations }
        procedure CreateCombobox(var aComboBox:TCombobox;aLeft, aTop: integer);
        procedure MyComboBoxChange(Sender: TObject);
        procedure MyComboBoxExit(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.CreateCombobox(var aComboBox: TCombobox;
      aLeft, aTop: integer);
    begin
      aComboBox := TComboBox.Create(Self);
      aComboBox.Parent := Self;
      aComboBox.OnChange := MyComboBoxChange;
      aComboBox.OnExit := MyComboBoxExit;
      aComboBox.DropDownCount := 5;
      aComboBox.Style := csDropDown;
      aComboBox.Items.Add('字段');
      aComboBox.Items.Add('aaa');
      aComboBox.Items.Add('bbb');
      aComboBox.Items.Add('ccc');
      aComboBox.Items.Add('其他类型');
      aComboBox.Left := aLeft + ListView1.Left + 1;
      aComboBox.Top := aTop + ListView1.Top + 1;
      aComboBox.Width := 50;
      aComboBox.BringToFront;
      aComboBox.SetFocus;
    end;procedure TForm1.MyComboBoxChange(Sender: TObject);
    begin
      if Assigned(ListView1.Selected) then
        ListView1.Selected.Caption := TCombobox(Sender).Text;
    end;procedure TForm1.MyComboBoxExit(Sender: TObject);
    begin
      try
        FComboBox.Free;
      except
      end;
      FComboBox := nil;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var
      lp: integer;
    begin
      for lp := ComponentCount - 1 downto 0 do
      begin
        if Components[lp] is TCombobox then
        begin
          TCombobox(Components[lp]).Free;
        end;
      end;
      FComboBox := nil;
    end;procedure TForm1.ListView1Click(Sender: TObject);
    begin
      FormDestroy(Sender);
      if Assigned(ListView1.Selected) then
      CreateCombobox(FComboBox, ListView1.Selected.Left, ListView1.Selected.Top);
    end;end.