我在Delphi 10 Seattle DX Studio工作。我正在开发我使用ListBox的应用程序。我想删除ListBox中选定的项,但我对这段代码有问题。当我运行这段代码时,我会得到错误"表达式的类型必须是布尔型",尽管我的代码有正确的语法。您的回答将不胜感激。
procedure TForm1.Button2Click(Sender: TObject);
var
ii : integer;
begin
with ListBox1 do
for ii := -1 + Items.Count downto 0 do
if Selected[ii] then Items.Delete(ii) ;
end;
end;
您的代码(我怀疑与问题中的代码不同)没有正确的语法,这就是编译器告诉您的。
事实上,您的代码可能与我们在问题中看到的代码不同,并且我们无法判断您使用的是VCL还是FMX,这使得这个问题有些可疑。改天,我可能会投票结束话题,但今天,我无论如何都要继续努力,这可能是不明智的。给。
问题中的代码(几乎)是有效的VCL代码。有一个额外的end
,我只能假设这是一个转录错误。很明显,您的实际代码看起来不是这样的,因为您不会那样缩进。
您的代码不是有效的FMX代码,即使在移除了杂散end
之后也是如此。编译器使用来反对Selected[ii]
[dcc32错误]:E2149类没有默认属性
这与您报告的错误不同。错误的原因是Selected
是类型为TListBoxItem
的无索引属性。
我认为真正发生的事情是,问题中的代码与您试图编译的代码不同。并且您试图编译的代码无效。一般来说,当编译器告诉你的代码无效时,你应该相信它,即使你不能立即理解它
当你停止使用with
时,你的生活会变得轻松很多。每次你使用with
,就会有一只小狗死亡。此外,由于来自内部命名空间的名称隐藏了来自外部命名空间的名称,因此您的命名空间会因经常出现的令人惊讶和不可预测的结果而扩大。
虽然很明显-1 + Items.Count
和Items.Count - 1
是一样的,但你必须四处寻找能编写前者的程序员。你可以继续这样做,但你会逆流而行。您的代码看起来与所有其他代码不同,并且对于代码的任何其他读者来说都会有很大的阻抗。我建议你在这个问题上顺其自然。