2016-01-29 3 views
0

Я все ближе и ближе разбираюсь в ObjectListView. Большая кривая обучения пытается преобразовать все примеры из C# в VB.net.ObjectListView BarRenderer в VB.net

У меня есть рабочий ObjectListView, который я создал для учебных целей.

Я пытаюсь создать BarRenderer, основанный на столбце высоты. Я закончил создание sub, который запускает 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, когда на самом деле он автоматически считывает значение. Вы просто поставляете min и max для панели, и это создает.

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 
Смежные вопросы