单击ListBox

时间:2015-06-23 10:15:48

标签: delphi listbox delphi-xe8

我最近从好的Delphi 7切换到Embracadero Delphi XE8,现在我不断收到这个错误。每次我在任何ListBox中错误地点击一个空行时都会出现 - 这是我在D7中无法做到的。这是某种错误,还是我做错了什么?

UPD: 这是一个问题列表框的OnClick过程:

procedure TMainForm.ChoiceListBoxClick(Sender: TObject);
begin
Choice:=ChoiceListBox.Items[ChoiceListBox.ItemIndex];
ChoiceListBox.Items.Clear;
if InDialogueWith<>'' then DialoguesUnit.Dialogue
else ActionsUnit.Actions;
end;

它将玩家的选择保存到变量中,清除列表然后根据情况将其转发到某个过程。正如我之前所说,在DE7中一切正常 - 我无法点击ListBox中的空行。

1 个答案:

答案 0 :(得分:2)

您发布的代码存在一个根本性缺陷,即未能检查ChoiceListBox.ItemIndex的值以确保在使用该项目访问ChoiceListBox.Items之前选择该项目。

首次创建TListBox时,默认情况下不会选择任何项目(除非您在Object Inspector或代码中设置ItemIndex,否则只要单击列表框,就会调用TListBox.OnClick,无论是否单击是否在项目之上。在尝试使用该项目之前,您需要确保首先选择了一个项目。

正确的代码将是

procedure TMainForm.ChoiceListBoxClick(Sender: TObject);
begin
  if ChoiceListBox.ItemIndex <> -1 then
  begin
    Choice:=ChoiceListBox.Items[ChoiceListBox.ItemIndex];
    ChoiceListBox.Items.Clear;
    if InDialogueWith <> '' then 
      DialoguesUnit.Dialogue
    else 
      ActionsUnit.Actions;
  end;
end;

请注意,由于您没有另行说明,并且因为您将Delphi 7称为您要升级的版本,我假设您的问题涉及VCL。由于IDE的最后几个版本包括共享相同名称的VCL和FMX控件,因此通常最好包含一个标记(或一些文本),指示您正在使用的UI控件。