2016-01-29 32 views
0

我越來越接近理解ObjectListView。大的學習曲線正試圖將所有的C#示例轉換爲VB.net。VB.net中的ObjectListView BarRenderer

我有一個工作的ObjectListView,我爲學習目的而創建。

我正在嘗試創建基於高度列的BarRenderer。我最終創建了一個從FormatRow觸發的子。但是,當條形圖顯示時,它們並不如預期的那樣。我把喬設定爲75,瑪麗設定爲25.我預計酒吧分別爲75%和25%。

可能有一種方法可以做到這一點,就像我對imagegetter所做的那樣,但我不知道如何。我把代碼留在那裏作爲一個額外的例子。

Private Sub Button3_Click_1(sender As Object, e As EventArgs) Handles Button3.Click 

    Dim LvLst As New List(Of Person) 

    Dim LvItm As New Person With {.FirstName = "Joe", 
            .LastName = "Blow", 
            .Glasses = "Y", 
            .Height = "75"} 
    LvLst.Add(LvItm) 

    Dim LvItm2 As New Person With {.FirstName = "Mary", 
            .LastName = "Swanson", 
            .Glasses = "N", 
            .Height = "25"} 
    LvLst.Add(LvItm2) 

    ObjectListView3.View = View.Details 

    Dim myImages = New ImageList 
    myImages.Images.Add(My.Resources.Hipster_Glasses_icon) 
    myImages.Images.Add(My.Resources.Button_important_icon) 
    ObjectListView3.SmallImageList = myImages 

    ObjectListView3.OwnerDraw = True 
    Col_Glasses.ImageGetter = Function(x As Object) As Integer 
            Dim casted As Person = DirectCast(x, Person) 
            If casted.Glasses = "Y" Then 
             Return 0 
            Else 
             Return 1 
            End If 
           End Function 

    ObjectListView3.SetObjects(LvLst) 

End Sub 

Private Sub lsv_OpenTickets_FormatRow2(sender As Object, e As FormatRowEventArgs) Handles ObjectListView3.FormatRow 
    Dim tkt As Person = DirectCast(e.Model, Person) 
    Col_Height.Renderer = New BarRenderer(tkt.Height, 100, Pens.Black, Brushes.Gold) 
End Sub 

enter image description here

我一直在使用這個網站作爲參考:http://objectlistview.sourceforge.net/cs/ownerDraw.html#owner-draw-label

回答

0

明白了!

我試圖將值送入BarRenderer,但實際上它會自動讀取值。您只需提供酒吧的最小值和最大值,並創建它。

Col_Height.Renderer =新BarRenderer(0,100,Pens.Black,Brushes.Gold)

事實上,你甚至都不需要FormatRow事件:

Private Sub Button3_Click_1(sender As Object, e As EventArgs) Handles Button3.Click 

    Dim LvLst As New List(Of Person) 

    Dim LvItm As New Person With {.FirstName = "Joe", 
            .LastName = "Blow", 
            .Glasses = "Y", 
            .Height = "75"} 
    LvLst.Add(LvItm) 

    Dim LvItm2 As New Person With {.FirstName = "Mary", 
            .LastName = "Swanson", 
            .Glasses = "N", 
            .Height = "25"} 
    LvLst.Add(LvItm2) 

    ObjectListView3.View = View.Details 

    Dim myImages = New ImageList 
    myImages.Images.Add(My.Resources.Hipster_Glasses_icon) 
    myImages.Images.Add(My.Resources.Button_important_icon) 
    ObjectListView3.SmallImageList = myImages 

    ObjectListView3.OwnerDraw = True 
    Col_Glasses.ImageGetter = Function(x As Object) As Integer 
            Dim casted As Person = DirectCast(x, Person) 
            If casted.Glasses = "Y" Then 
             Return 0 
            Else 
             Return 1 
            End If 
           End Function 

    Col_Height.Renderer = New BarRenderer(0, 100, Pens.Black, Brushes.Gold) 

    ObjectListView3.SetObjects(LvLst) 

End Sub