在运行时更改ListView项目图像(firemonkey)

时间:2018-04-14 22:30:24

标签: firemonkey c++builder-10.2-tokyo

我需要能够让用户按下并设置ListView项目的复选框,而无需单击该项目。如果他们按下复选框,我将添加/删除复选标记并采取一些措施。如果他们按下项目文本,我可以采取其他行动。

我可以使用ListBox执行此操作,内置功能没有任何问题。我无法弄清楚如何使用ListView。怎么做?

我可以在ListView1ItemClickEx中放入以下代码,以了解用户何时单击图像。也许我可以将图像更改为复选标记?

  if (ItemObject->Name == "I") {
     ShowMessage("Item Image clicked");
  }

但我不知道如何在运行时更改特定项目图像(例如,我可以在复选标记图像和未检查图像之间切换)。

下面的图片是为了清晰起见。单击红色框中的任意位置将更改项目复选框。对于ListBox,单击蓝色框中的任意位置将触发OnClick事件,而不是更改复选框。我想在ListView中使用相同的行为。

enter image description here

1 个答案:

答案 0 :(得分:0)

好的,雷米回答this related question并帮助我解决了这个问题。现在我可以使ListView有一个功能类似于ListBox的复选框。每当用户按下(或点击)项目的图像区域时,我都会通过切换项目图像来实现。

当用户点击项目图像时,我将其捕获(根据ListView1ItemClickEx事件中的Remy的代码)并在参考ItemIndex(例如myVector)的向量中从0-> 1或1-> 0切换它[ItemIndex] = 0)然后我完全重建ListView(清除它并从头开始构建)。

enter image description here

我以为我必须记住列表中我向下滚动的位置,刷新ListView之后我必须滚动到代码中的那一点 - 但是,这不是案件。我不知道为什么但是在刷新之后我仍然在列表中点击项目图像的位置。它使它工作和感觉就像一个复选框。

它在iOS,Android和Windows中运行良好。

P.S。我忘了提到你需要对任何标题进行处理,就像它们是你的向量中的项目一样,可以跟上每个项目的关注。图像(0或1)。否则,添加标题会导致您不同步,点击某个项目的图片会切换其他项目的图片。