2016-03-23 23 views
1

私はオブジェクトリストに-3000から10000の範囲の数値の列を使用しています。私は2000未満のフィルタを適用する必要があります(これにはすべての負の数値も含める必要があります)。私は例を読んで助けて(http://objectlistview.sourceforge.net/cs/filtering.html#filtering-label)、それはC#であり、私はVB.netで作業しています。私は通常、変換を把握することができますが、この1つは私を困惑させています。VB.net Objectlistview数値の範囲で列をフィルタリングする

デリゲートの代わりに(画像を適用する)関数を使用する別のコードがありますが、このフィルタリングインスタンスで機能するようにできませんでした。私も正規表現を使ってみましたが、数字を扱って以来、私は正規表現なしでそれをしなければならないと感じています。

誰かがこれを乗り越えるために、VB.netの番号範囲でカスタムフィルタリングの例を表示できますか?

ありがとうございます!私は一緒に投げた。ここ

は例です:あなたは「フィルタの適用」ボタンをクリックすると enter image description here

を、それだけで(30の高さの下で両方)メアリー・スワンソンとジミニー・クリケットを示すべきです。ここで

は、私はOLV

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", 
            .HeightBar = "75"} 
    LvLst.Add(LvItm) 

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

    Dim LvItm3 As New Person With {.FirstName = "Mike", 
            .LastName = "Tyson", 
            .Glasses = "N", 
            .Height = "125", 
            .HeightBar = "125"} 

    LvLst.Add(LvItm3) 

    Dim LvItm4 As New Person With {.FirstName = "Jiminy", 
            .LastName = "Cricket", 
            .Glasses = "Y", 
            .Height = "-9", 
            .HeightBar = "-9"} 

    LvLst.Add(LvItm4) 


    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.UseCellFormatEvents = True 
    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) 

    'Set no data message 
    ObjectListView3.EmptyListMsg = "No Data Found" 
    ObjectListView3.EmptyListMsgFont = New Font("Tahoma", 18) 

    'Allows you to type and search inside the olv 
    ObjectListView3.IsSearchOnSortColumn = True 

    ObjectListView3.SetObjects(LvLst) 

End Sub 

を作成するために使用されるコードであり、これは私が

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 
    ObjectListView3.ModelFilter = Function(x As Object) As ModelFilter 

             Dim casted As Person = DirectCast(x, Person) 

             If casted.Height <= CInt(HeightFilter.Text) Then 
              Return x 
             End If 

            End Function 
End Sub 

人に

Public Class Person 
    Public Property FirstName As String 
    Public Property LastName As String 
    Public Property Glasses As String 
    Public Property Height As Integer 
    Public Property HeightBar As Integer 
End Class 
クラスを助けが必要なフィルタ]ボタンの背後にあるコードであります

IModelFilterがデリゲート型ではないというエラーが表示されます。私は何を私は関数から戻ってくるべきか分からない?メガネの列に使ったイメージを見ましたか?私は同じアプローチを使用しようとしていましたが、私はIModelFilterのためにこれを使用したことはありません。助けてくれてありがとう!

+0

例のC#コードはかなり単純で、vb.netに簡単に変換する必要があります。試したコードを表示できますか? –

+0

Convert c#to vb.net http://www.developerfusion.com/tools/convert/csharp-to-vb/ – Dejan

+0

こんにちは@ChaseRocker要求通りに質問を更新しました。どんな助けでも大歓迎です –

答えて

1

フィルタを新しいModelFilterに設定します。 xは、関数に渡されるオブジェクトで、Personクラスにキャストし、高さでフィルタリングします。フィルタは、基本的にはTrue(それを維持する)またはFalse(フィルタリングする)を返し、各Personを処理します。

ObjectListView3.ModelFilter = New BrightIdeasSoftware.ModelFilter(Function(x) CType(x, Person).Height <= CInt(Me.HeightFilter.Text)) 
+0

ありがとう@ChaseRocker!あなたは私に時間を節約しました。このソリューションを使用している他の人にとっては、UseFilteringをTrue(ObjectListView3.UseFiltering = True)に設定するだけです。 –