Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:Listview大图标视图:消除行之间的空间_C#_Winforms_Listview_Ownerdrawn - Fatal编程技术网

C#:Listview大图标视图:消除行之间的空间

C#:Listview大图标视图:消除行之间的空间,c#,winforms,listview,ownerdrawn,C#,Winforms,Listview,Ownerdrawn,我正在为特定用途/应用程序构建一个自定义ListView控件,其中我必须显示gallery。为此,我使用所有者绘制过程在ListView中手动绘制图像 我在ListView中的图像将为128x128像素,因此我已将一个空白ImageList控件(具有128x128图像尺寸)作为图像列表分配给ListView,以自动定义项目大小 到目前为止,这对我来说还不错。但是我需要消除项目行之间的空间(如示例图像所示)。我的目标是使自定义listview看起来像一个图像网格。我不担心项目左右的空间,只需要去

我正在为特定用途/应用程序构建一个自定义ListView控件,其中我必须显示gallery。为此,我使用所有者绘制过程在ListView中手动绘制图像

我在ListView中的图像将为128x128像素,因此我已将一个空白ImageList控件(具有128x128图像尺寸)作为图像列表分配给ListView,以自动定义项目大小

到目前为止,这对我来说还不错。但是我需要消除项目行之间的空间(如示例图像所示)。我的目标是使自定义listview看起来像一个图像网格。我不担心项目左右的空间,只需要去掉行之间的空间,使其看起来像一个连续的网格


感谢您的帮助。谢谢。

切换到平铺视图并执行自己的绘图可以避免行间距问题:

listView1.TileSize = new Size(128, 128);
listView1.View = View.Tile;
listView1.OwnerDraw = true;
listView1.DrawItem += listView1_DrawItem;
和一个简单的绘图例程:

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) {
  Color textColor = SystemColors.WindowText;
  if (e.Item.Selected) {
    if (listView1.Focused) {
      textColor = SystemColors.HighlightText;
      e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
    } else if (!listView1.HideSelection) {
      textColor = SystemColors.ControlText;
      e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds);
    }
  } else {
    using (SolidBrush br = new SolidBrush(listView1.BackColor)) {
      e.Graphics.FillRectangle(br, e.Bounds);
    }
  }

  e.Graphics.DrawRectangle(Pens.Red, e.Bounds);
  TextRenderer.DrawText(e.Graphics, e.Item.Text, listView1.Font, e.Bounds,
                        textColor, Color.Empty,
                        TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
}
结果:


如果切换到OwnerDraw(在其中绘制矩形内容),则可以将视图切换到平铺。或者你可以尝试画出超出e.边界的矩形。但是使用Tile可能是最简单也是最好的解决方案,尽管它仍然会有很小的间隙。@LarsTech Tile方法确实解决了行之间的空间问题,但是now I无法更改项目大小。你提到的帖子只在LargeIcon视图模式下有效--编辑:我刚刚注意到TileSize属性。谢谢。@TaW是的,我曾经尝试过绘制超出边界的尺寸,但是问题发生在最后一行;图形超出了ListView的边界。