如何在betterlistview上使用此覆盖?

时间:2015-01-08 06:53:48

标签: .net vb.net listview override ownerdrawn

我一直在使用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,因为我怀疑这可能是个问题?

1 个答案:

答案 0 :(得分:0)

我已经搜索了一些关于添加自定义控件的内容,似乎重建项目会将控件放在工具箱的顶部。现在一切正常。

感谢您提供帮助。