(ListView?) - 在Windows资源管理器中控制

时间:2014-06-15 09:46:03

标签: c# listview

我想知道在插入设备时是否有任何方法可以在Windows资源管理器的自动启动中制作类似控件的控件。

enter image description here

我原本认为这可能是一种或多或少修改过的listview控件,但我无法找到任何与Google有关的内容。我还检查了很多CodeProject页面。

有没有人知道我能在哪里获得控制权或我如何自己制作? (我对OwnerDraw不太好:P)

感谢。

1 个答案:

答案 0 :(得分:1)

实际上调整ListView并不比拥有它更容易。这是一个示例,它实际上是多么简单。

您只需编写一个事件(DrawItem),然后就完成了。

这段代码假定:

  • LV的视图设置为列表
  • 您的表单中添加了合适的ImageList
  • 您将LV的ownerDraw设置为true
  • 您添加了两列来保存两个标签中显示的文字
  • 你已经使第一列足够宽,以容纳所有被绘制的东西
  • 你让LV的FontSize和图像一样大。高度(比如32)
  • 将适当的ImageIndex值分配给LV的项目

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
  Point point0 = new Point(e.Bounds.Left, e.Bounds.Top);
  Point point1 = new Point(imageList1.ImageSize.Width + 10, e.Bounds.Top + 5);
  Point point2 = new Point(imageList1.ImageSize.Width + 10, e.Bounds.Top + 25);
  Size size = new Size(listView1.ClientRectangle.Width, e.Bounds.Height);
  Rectangle R = new Rectangle(point0, size);
  Font F1 = new Font(listView1.Font.FontFamily, 11f, FontStyle.Bold);
  Font F2 = new Font(listView1.Font.FontFamily, 10f);

  if (e.Item.Focused) e.Graphics.FillRectangle(Brushes.LightBlue, R);
    else if (e.ItemIndex % 2 == 1) e.Graphics.FillRectangle(Brushes.GhostWhite, R);
  e.Graphics.DrawImage(imageList1.Images[e.Item.ImageIndex], point0 );
  e.Graphics.DrawString(e.Item.Text, F1, Brushes.Black, point1);
  e.Graphics.DrawString(e.Item.SubItems[1].Text, F2, Brushes.Black, point2);
  F1.Dispose(); F2.Dispose();
}

请注意,我已经硬编码了一些颜色来绘制每隔一行以及焦点项目。这些颜色确实应该使用相应的系统颜色。想到这些:

 SolidBrush brush0 = new SolidBrush(SystemColors.ControlLight);
 SolidBrush brush1 = new SolidBrush(SystemColors.Highlight);

我正在使用分配给LV但具有中等大小的字体。显然,或多或少的任何东西,特别是各种偏移,都可以根据自己的喜好进行配置。但使用System.Colors集合中的颜色是保持与用户保持一致的好方法。 Windows主题。