我正在使用ListView组件在我的程序中显示一些已保存的配置文件,每个配置文件都有一个图标和一个标题。所以我使用了ListView,其中 View 属性设置为 Tile (也应用了灌浆)
我怎么不添加一些关于条目的描述文本(不是工具提示)。我可以像Windows资源管理器那样做吗?
答案 0 :(得分:5)
您可能需要定义列标题。来自documentation:
平铺视图显示每个项目 左侧的大图标和文字 有关权利的信息。文字 信息由项目标签组成 接下来是子项目。默认情况下,仅限 显示第一个子项目 对应于项目标签。至 显示其他子项,您必须 将
ColumnHeader
个对象添加到Columns
集合。每个子项目 图块对应于列 头。控制哪些子项 显示和他们的顺序 显示,你必须设置ListViewItem.ListViewSubItem.Name
每个项目的财产和 每个ColumnHeader.Name
属性 头。然后,您可以添加,删除和 重新排列Columns
中的标题 收集达到理想 结果
答案 1 :(得分:0)
我不确定这是否会完全符合您的要求,因为我只是在没有任何图标的情况下对其进行了测试,但是当ListView处于平铺模式时它将编写子项。
首先将ListView上的OwnerDraw
设置为true
,然后将此函数添加到其DrawItem事件中:
private void statisticsView_DrawItem(object sender,
DrawListViewItemEventArgs e)
{
e.Graphics.FillRectangle(Brushes.White, e.Bounds);
if((e.State & ListViewItemStates.Selected) != 0)
e.DrawFocusRectangle();
Rectangle bounds = e.Bounds;
Font font = ((ListView)sender).Font;
Font nameFont = new Font(font.FontFamily,
font.Size,
FontStyle.Underline | FontStyle.Bold,
font.Unit,
font.GdiCharSet,
font.GdiVerticalFont);
using(StringFormat sf = new StringFormat())
{
e.Graphics.DrawString(e.Item.SubItems[0].Text,
nameFont, Brushes.Black, bounds, sf);
bounds.Y += 17;
for(int i = 1; i < e.Item.SubItems.Count; ++i, bounds.Y += 15)
e.Graphics.DrawString(e.Item.SubItems[i].Text,
font, Brushes.Black, bounds, sf);
}
}
首先,它使用白色背景颜色填充图块,如果选择了图块,则会在其周围绘制一个选择矩形。下一部分只是采用ListView上的字体集并创建一个带有一些更改的重复字体。最后,它绘制每个子项目,同时在每个子项目后将绘图矩形向下移动15个像素。第一个子项用单独的字体绘制,比其余部分高17个像素。
您应该能够修改代码以满足您的需求。