- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Embarcadero 的 C++ Builder XE8。我有一个 ListView 并动态添加列及其项目。我需要一个图像列表,因为我想使用 (ListItem->SubItemImages[0] = i;) 将图像添加到第二列,即 (ListItem->SubItemImages[0] = i;)
似乎通过添加此图像列表,C++ Builder 默认情况下认为主列也需要图像,因此它默认将图像列表的第 0 个元素附加到该列中的所有项目。我不希望这种情况发生。相反,在“ID”列下,我只需要 ID,不需要任何图像。我怎样才能做到这一点?
我的代码:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
const string firstName[] = {"Snowball", "Scavies", "Tinkerbell", "Fido", "Garfield", "Kobe"};
const string lastName[] = {"M", "E", "O", "W", "W", "W"};
TListColumn *NewColumn;
TListItem *ListItem;
TListView *ListView = ListView1;
ListView->SmallImages = ImageList1;
ListView->ViewStyle = vsReport;
NewColumn = ListView->Columns->Add();
NewColumn->Caption = "ID";
NewColumn = ListView->Columns->Add();
NewColumn->Caption = "Node";
NewColumn = ListView->Columns->Add();
NewColumn->Caption = "First";
for (int i = 0; i < sizeof( firstName ) / sizeof( firstName[0] ); i++)
{
char buffer[3];
itoa(i,buffer,10);
ListItem = ListView->Items->Add();
ListItem->Caption = buffer;
ListItem->SubItems->Add(firstName[i].c_str());
ListItem->SubItems->Add(lastName[i].c_str());
ListItem->SubItemImages[0] = i;
//ListItem->ImageIndex = NULL;
}
}
最佳答案
当您将项目添加到关联有 ImageList 的 ListView 时,它会假设您的意图是将这些图像用于项目本身,因此添加的每个项目都将被分配一个默认的>ImageIndex 为 0(图像列表中的第一个图像)。
要从项目本身中删除图像,您只需将默认的 ImageIndex 值 0 替换为 -1,表示“无图像”。
ListItem->ImageIndex = -1;
ListItem->SubItemImages[0] = i;
正如评论中所指出的,这涉及不绘制项目标题旁边的图像(第 0 列),但 ListView 仍将为这些图像留出空间,即使不绘制任何图像:
有两种方法可以避免这种情况:
不要将图像列表与 ListView 关联,并使用自定义绘图来绘制任何需要图像的子项。
将第 0 列的列宽设置为 0,以有效隐藏该列并将第一个子项目视为项目标题。
每种方法都有权衡。
第一个需要增加自定义绘图的复杂性。第二个更简单,但意味着您需要在 ListView 上启用 RowSelect 行为。否则,子项目无法用于选择列表中的项目,并且不会使用任何选择突出显示进行绘制。
这也意味着在任何事件处理等中,您必须记住将 Subitem[0] 视为特殊情况(项目“标题”):
ListView->RowSelect = true;
// ..
NewColumn = ListView->Columns->Add();
NewColumn->Caption = "Not Used";
NewColumn->Width = 0;
NewColumn = ListView->Columns->Add();
NewColumn->Caption = "ID";
// ..
// No need to set ListItem->Caption since it is hidden
ListItem->SubItems->Add(buffer); // subitem[0] = 'the item'
ListItem->SubItems->Add(firstName[i].c_str());
ListItem->SubItems->Add(lastName[i].c_str());
ListItem->SubItemImages[1] = i;
一些好奇的用户也有可能调整列[0]的大小并发现您隐藏的 secret 。 :)
关于delphi - TListView 自动将图像列表中的图像附加到我的 TListView 的第一列。我该如何摆脱这种行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43332488/
我正在使用 Embarcadero 的 C++ Builder XE8。我有一个 ListView 并动态添加列及其项目。我需要一个图像列表,因为我想使用 (ListItem->SubItemImag
我正在尝试在 TListView 中放置一个图标当某些行显示时,我有 TImageList与加载的图像,但它没有连接。我的代码是这样的 with sListView2 do begin test
当使用 TListView 并且主题在应用程序中被禁用时,焦点和选定的项目显示如下: 注意两个图像中三角形所在的位置。项目的绘制框不会在图标出现的位置绘制。在 TListBox 中,绘制的项目填充整个
我已经使用 TListView 制作了我的应用程序,以将主数据集显示为列表作为导航记录的方式。我已将 LiveBindings 与 Sync * 连接一起使用。 主要问题是它将整个表加载到内存中。大
我有一个 TListView 的后代,它提供了一些附加功能,例如排序和从 TDataset 加载自身的能力。我现在希望进一步扩展这个组件,以便在将项目添加到 ListView 时可以指定绘图的某些方面
TListView 控件是否有一个在控件滚动时触发的事件? 我宁愿不必对 TListView 控件进行子类化。 最佳答案 这非常有效,但可能会违反您问题的限制。 在包含使用 TListView 的表单
编写 FMX 应用程序并使用以下文档... http://docwiki.embarcadero.com/RADStudio/Berlin/en/Customizing_FireMonkey_List
我创建了 ListView 并添加了复选框来检查每一行(如果需要)。一切都很好,直到 ListView 中有很多项目,因此需要对其进行排序。我在线检查,然后发现如果滚动滚动条,复选框不会与其他内容一起
我正在对 tlistview 进行编程,以便它从右到左显示其列(以便正确显示希伯来语文本)。我在表单的创建方法中使用以下代码,其中“lv”是 ListView SetWindowLong (lv
我有一个包含 3 列的 Tlistview,我需要来自 Tcollection 对象,如下所示 FListeDispoProduit := TListeDispoProduit.Create(TPro
我有一个显示小缩略图的TListView(ViewStyle:=vsIcon)。在运行时,我将图像分配给项目: for i := 0 to Total - 1 DO with ListVie
我正在使用 Delphi 2010,并且我试图允许用户在 TListView 中的每行 2 个选项之间进行选择。使用 TListView,我可以将样式设置为 vsReport 并启用复选框,但这只会让
当项目添加到 TListView 时,如何捕获事件? 根据文档,我认为 OnInsert 事件可以完成这项工作。它甚至将实际的 TListItem 对象传递给处理程序: OnInsert Occurs
是否可以修复 TListView 中 subitem 图像的绘制,以便它们不会如图所示在左侧被截断? 最佳答案 嗯,Pieter van Wyk,我做了一个简单的示例,展示了如何自行绘制 TListV
使用标准 TListView 组件 (ViewStyle = vsReport),我附加了一个 TImageList 并成功将图像添加到第一列 (Item.ImageIndex := 0) )以及后续
带有 FireMonkey 的 Delphi 10.4.1。 我在 TListView 上有 50 个项目,ID 从 1 到 50。这里没有发布代码,因为我什至不知道从哪里开始。 如果我搜索 ID=3
我需要更改我的 listView 的所有标题的背景颜色以突出显示它们。我在 Object Inspector 上一无所获,在 Style Designer 上也一无所获,你们能给我一些指导吗? 最佳答
我有一个 ViewStyle 设置为 vsReport 的 TListView。如何更改网格的颜色和网格线的宽度。 D2009 中的网格线有点太粗了,我想要与 D5 中的宽度相同。 谢谢 最佳答案 没
我正在使用 TListView我已经成功地填充了每个项目的标题和第一个子项目。请参见下面的示例。 user pass working status valid data1 pass -
我有一个包含 4 列的 TListview(当然都是字符串),但是,我在其中存储数据: 标题:任意字符串 SubItems[0]:整数,例如'5016' SubItems[1]:日期,例如'03/22
我是一名优秀的程序员,十分优秀!