VB.net混合了listview的项目

时间:2014-02-16 14:12:12

标签: vb.net listview random

我制作了一个拼图应用程序,首先从计算机中选择一个图像,然后单击“开始”,它将获取图像的一部分并将其添加到列表视图中。然后你从listview中获取图像并将它们放在自由空间中。但是问题出在listview中,图像是有序的(图像部分从右到左,从上到下)。

我的问题是如何在列表视图中随机混合项目(图像)?

2 个答案:

答案 0 :(得分:2)

以随机顺序将拼图分开然后将其存储在LV中会更容易。要做到这一点,你必须为每个拼图分配一个索引值,比如ID。使用此功能将拼图分开并知道他们选择了哪一个。

这将创建一个List(Of Integer),它代表拼图ID,然后将其洗牌:

Function RandomList(MaxVal As Integer) As List(Of Integer)
    Dim rand As New Random()

    Dim list As New List(Of Integer)
    Dim temp As Integer
    Dim ndxRand As Integer

    For n As Integer = 0 To MaxVal - 1
        list(n) = n
    Next

    For thisNDX As Integer = 0 To MaxVal - 1
        ndxRand = rand.Next(thisNDX, MaxVal)
        temp = list(ndxRand)
        list(ndxRand) = list(thisNDX)
        list(thisNDX) = temp
    Next thisNDX

    Return list
End Function

使用类似这样的东西:

Dim list As List(Of Integer) = RandomList(PieceCount)

For n As Integer = 0 To PieceCount - 1
    puzzlePiece = Puzzle.ReMovePiece(List(n))

    AddPieceToLV(puzzlePiece)
Next n

当然这只是猜测,因为我们不知道代码是什么样的。

由于各种原因,直接随机化LV是有问题的。我想这些碎片是图像,我不知道如何对图像进行排序;你必须为它们分配一个值来排序。接下来,LV本身只按Item而不是SubItems排序,这是图像可能的位置,因此它们以LgIcon视图显示(?...猜测)。接下来,LV只进行文本排序(除非你也编写了一个ListViewItemSorter),这将是一个超过10件的问题。更容易将它拆开并随机存储。

答案 1 :(得分:0)

谢谢大家,我发现了如何做到这一点: 我创建了一个新的listview并将其命名为listview2(第一个是listview1)。 然后我将所有图像添加到listview2而不是lv1,之后我将lv2的项目随机添加到lv1并且它可以工作

对于i = 0到ListView2.Items.Count - 1             昏暗值As Integer = CInt(Int((ListView2.Items.Count - 1)* Rnd()))

        ListView1.Items.Add(ListView2.Items(value).Text, ListView2.Items(value).ImageIndex)
        ListView2.Items(value).Remove()
    Next i

此致