是否可以覆盖listview detault选择画图?看起来像半透明蓝色的对象覆盖在项目上,就像在资源管理器窗口中一样。
我想在选区周围绘制轮廓以指示选区。
有什么办法吗?例子是值得赞赏的。
.NET ListView支持所有者绘图比其他答案建议的直接得多。您甚至不需要继承。将OwnerDraw设置为true,侦听DrawSubItem事件,然后在该事件中可以绘制自己喜欢的东西。
与往常一样,ObjectListView使此过程更容易。此页面记录了确切的操作方法。如果您觉得用户很卑鄙,可以使用以下方法: 短码网-DuanMa.NET
但是,如果您想在单元格本身的边界之外绘制某些东西,这些技术都将无法使用。因此,如果您希望围绕与前一行和后一行重叠的整行绘制选择轮廓,则无法通过所有者绘图来做到这一点。每个单元格都是单独绘制的,并">
要执行类似您要求的操作,您必须拦截自定义绘图的后绘画阶段(而不是所有者绘图。MichaelDunn为CodeProject编写了自定义绘图的精彩介绍)。您可以在此处阅读所需内容。
我不想这么说,但是最简单的答案是使用ObjectListView,创建装饰并安装它:
public void InitializeSelectionOverlay()
{
this.olv1.HighlightForegroundColor = Color.Black;
this.olv1.HighlightBackgroundColor = Color.White;
this.olv1.AddDecoration(new SelectedRowDecoration());
}
public class SelectedRowDecoration : IOverlay
{
public void Draw(ObjectListView olv, Graphics g, Rectangle r) {
if (olv.SelectedIndices.Count != 1)
return;
Rectangle rowBounds = olv.GetItem(olv.SelectedIndices[0]).Bounds;
rowBounds.Inflate(0, 2);
GraphicsPath path = this.GetRoundedRect(rowBounds, 15);
g.DrawPath(new Pen(Color.Red, 2.0f), path);
}
private GraphicsPath GetRoundedRect(RectangleF rect, float diameter) {
GraphicsPath path = new GraphicsPath();
RectangleF arc = new RectangleF(rect.X, rect.Y, diameter, diameter);
path.AddArc(arc, 180, 90);
arc.X = rect.Right - diameter;
path.AddArc(arc, 270, 90);
arc.Y = rect.Bottom - diameter;
path.AddArc(arc, 0, 90);
arc.X = rect.Left;
path.AddArc(arc, 90, 90);
path.CloseFigure();
return path;
}
}
这给出了类似以下内容的内容:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将联系本站反馈,一经查实,立即处理!
《c# Winforms ListView选择图?》文档下载仅供参考学习,下载后请在24小时内删除。
转载注明出处:https://www.duanma.net/article/0abce900688.html