我最近从好的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中的空行。
答案 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控件。