我一直在使用BetterListView,我问开发人员是否可以更改选择的颜色。以下是他们的回复:
您可以使用“所有者绘图”自定义选择。这需要 子类化BetterListView并绘制自定义选择而不是 默认的一个:
public class CustomListView : BetterListView { protected override void OnDrawItem(BetterListViewDrawItemEventArgs eventArgs) { if ((eventArgs.ItemStateInfo.ItemState & BetterListViewItemState.Selected) == BetterListViewItemState.Selected) { // draw custom selection eventArgs.Graphics.FillRectangle(Brushes.Brown, eventArgs.ItemBounds.BoundsSelection); } eventArgs.DrawSelection = false; // disable drawing default selection // default drawing (image, text etc.) base.OnDrawItem(eventArgs); } }
请注意eventArgs.ItemStateInfo.ItemState是一个标志枚举, 即该物品可以是热的,聚焦的并且可以独立地选择 自定义选择的绘制可能需要包括这些状态 更好的用户体验。默认选择使用Windows主题 显示方式与Windows资源管理器中的显示方式相同。
阅读本文后,我试图了解如何使用此覆盖,但我从未做过这样的事情。尽管如此,阅读了很多关于OwnerDrawing和Overriding的内容,我仍然感到困惑。
这里的代码已翻译成VB.Net并添加了另外两种选择类型:
Imports ComponentOwl.BetterListView
Public Class CustomBetterListview
Inherits BetterListView
Protected Overrides Sub OnDrawItem(eventArgs As BetterListViewDrawItemEventArgs)
If (eventArgs.ItemStateInfo.ItemState And BetterListViewItemState.Selected) = BetterListViewItemState.Selected Then
' draw custom selection
eventArgs.Graphics.FillRectangle(Brushes.Brown, eventArgs.ItemBounds.BoundsSelection)
End If
If (eventArgs.ItemStateInfo.ItemState And BetterListViewItemState.Focused) = BetterListViewItemState.Focused Then
' draw custom selection
eventArgs.Graphics.FillRectangle(Brushes.Red, eventArgs.ItemBounds.BoundsSelection)
End If
If (eventArgs.ItemStateInfo.ItemState And BetterListViewItemState.Hot) = BetterListViewItemState.Hot Then
' draw custom selection
eventArgs.Graphics.FillRectangle(Brushes.Blue, eventArgs.ItemBounds.BoundsSelection)
End If
eventArgs.DrawSelection = False
' disable drawing default selection
' default drawing (image, text etc.)
MyBase.OnDrawItem(eventArgs)
End Sub
End Class
我想我是在正确的道路上,但我无法弄明白......似乎我错过了一些基本面。我应该提一下,我试图在设计模式中覆盖放置在窗体上的BetterListViews,因为我怀疑这可能是个问题?
答案 0 :(得分:0)
我已经搜索了一些关于添加自定义控件的内容,似乎重建项目会将控件放在工具箱的顶部。现在一切正常。
感谢您提供帮助。