Delphi FMX,在运行时更改 TComboBox 图像

Delphi FMX, change TComboBox images at runtime

如果我以编程方式将 TComboBox.Images 更改为新的 TImageList,只有 TComboBox 中选定的图标发生变化,TComboBox(下拉列表)中的所有其他图标保持不变。

我有两个 TImageList,一个是彩色图标,一个是黑白图标,我想将黑白图标更改为彩色图标,反之亦然。

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  if ComboBox1.Images = ImageList1 then
    ComboBox1.Images := ImageList2
  else
    ComboBox1.Images := ImageList1;
end;

正如问题评论中所指出的,这确实是 Delphi 中的一个错误,因为至少在显示弹出窗口后更改 Images 属性 时内部下拉列表不会刷新一度。这可以通过在 TCustomComboBox.SetImages 过程中对 FMX.ListBox.pas 源文件进行小的更改来纠正:

对于 Delphi 11:

procedure TCustomComboBox.SetImages(const Value: TCustomImageList);
begin
  FImageLink.Images := Value;
  FItemsChanged := True;        // <- Add this
end;

对于 Delphi 10.4 CE:

procedure TCustomComboBox.SetImages(const Value: TCustomImageList);
begin
  FImageLink.Images := Value;
  TComboBoxHelper.SetItemsChanged(Self, True);        // <- Add this
end;