(ListView?) – 在Windows资源管理器中控制
我想知道在插入设备时是否有任何方法可以在Windows资源管理器的自动启动中进行类似控制。
我原以为这可能是一个或多或少被修改过的listview-control,但是我无法找到任何关于谷歌的东西。 我还检查了很多CodeProject页面。
有没有人知道我可以在哪里获得控制权或我如何自己制作一个? (我对OwnerDraw不太好:P)
谢谢。
实际上调整ListView
并不比ownerDrawing更容易。 这是一个示例,它实际上是多么简单。
你只需编写一个事件( DrawItem
)脚本,就完成了。
这段代码假设:
- LV的视图设置为List
- 您有一个合适的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主题保持一致的好方法。