代码之家  ›  专栏  ›  技术社区  ›  bear

TComboBox和TListBox项目删除?

  •  3
  • bear  · 技术社区  · 6 年前

    我正在尝试将项目添加到 TListBox TComboBox TEdit 在中添加项目时,我的代码工作正常 列表框组件 t杂物箱 但当我尝试删除中的选定项目时 列表框组件 从自身和从 TComobBox 它显示访问冲突。

    以下是我的代码中的过程:-

    procedure TMainForm.Button1Click(Sender: TObject);
    begin
      ListBox1.Items.Add(Edit1.Text);   
      ComboBox1.Items.Add(Edit1.Text);
    end;
    
    procedure TMainForm.Button2Click(Sender: TObject);
    begin
      ListBox1.Items.Delete(ListBox1.Selected.Index);
      ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(ListBox1.Selected.Text));
    end;
    

    解决:现在解决了一个孩子气的错误。这里是工作代码:

    procedure TMainForm.Button2Click(Sender: TObject);
    begin
      ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(ListBox1.Selected.Text));
      ListBox1.Items.Delete(ListBox1.Selected.Index);      
    end;
    
    3 回复  |  直到 6 年前
        1
  •  4
  •   MartynA    6 年前

    一种安全的(r)删除方法是

    procedure TForm1.DeleteItems(const TextToFind : String);
    var
      i1,
      i2 : Integer;
    begin
      i1 := ListBox1.Items.IndexOf(TextToFind);  
      i2 := ComboBox1.Items.IndexOf(TextToFind);
      if i1 >=0 then
        ListBox1.Items.Delete(i1);
      if i2 >=0 then
        ComboBox1.Items.Delete(i2);
    end;
    

    用法:

    DeleteItems(Edit1.Text);
    

    因为这不会假设在两个列表中选择了哪些项目。

    我让您使用调试器来找出为什么要获得AV。你去发现比我告诉你更有教育意义。

        2
  •  1
  •   Pieter B    6 年前

    此行从列表框中删除项目

    ListBox1.Items.Delete(ListBox1.Selected.Index);
    

    此行试图从组合框中删除该项

    ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(ListBox1.Selected.Text));
    

    但你在书中提到 ListBox1.Selected。文本 . 这是指您在第一次删除中刚刚删除的项目。 交换执行顺序应该可以:

    begin
      ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(ListBox1.Selected.Text));
      ListBox1.Items.Delete(ListBox1.Selected.Index);
    end
    
        3
  •  0
  •   Pavlo Golub    6 年前
    procedure TMainForm.Button2Click(Sender: TObject);
    begin
      if ListBox1.Selected.Index > -1 then ListBox1.Items.Delete(ListBox1.Selected.Index);
      if ComboBox1.ItemIndex > - 1 then ComboBox1.Items.Delete(ComboBox1.ItemIndex);
    end;