TComboBox和TListBox项目删除?

时间:2018-01-17 12:31:19

标签: delphi firemonkey

我正在尝试从TListBox中给出的文字中向TComboBoxTEdit添加项目 在TListBox TComboBox中添加项目时,我的代码工作正常,但当我尝试从TListBox中删除所选项目时,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 个答案:

答案 0 :(得分:4)

进行删除的安全(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。找出比告诉你的更有启发性。

答案 1 :(得分:1)

此行从列表框

中删除该项目
ListBox1.Items.Delete(ListBox1.Selected.Index);

此行正在尝试从组合框中删除该项目

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

但在其中你指的是 ListBox1.Selected.Text 。 这是指您刚刚在第一次删除时删除的项目。 交换执行顺序应该有效:

begin
  ComboBox1.Items.Delete(ComboBox1.Items.IndexOf(ListBox1.Selected.Text));
  ListBox1.Items.Delete(ListBox1.Selected.Index);
end

答案 2 :(得分:0)

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;