2017-05-06 32 views
0

我只想制作随机程序。它将被用来挑选比赛对(如FE欧洲冠军联赛quaterfinal对)Visual Basic(.NET)> randomize listbox picks(unique)

GUI画面:http://i.imgur.com/jqBMJjt.png

我有麻烦与此。当我试图使选择器,它工作得很好>从列表框中1 (左侧)到列表框2(列表框1项目的50%),列表框3(列表框1项目的50%)..(左侧),但这些选择并不是唯一的。有一些重复,你可以看到图像(第二列表框2×小白)。

我的代码部分:

Private Sub RandomiseListBox() 
    Dim count As Integer = CarbonFiberListBox1.Items.Count 
    Dim countt As Integer 
    'countt = count/2 
    Dim item As String 
    Dim itemz As New List(Of String)() 
    Dim repeat As New List(Of String)() 
    Dim aa, bb As Integer 


    If Not count = 0 And ((count Mod 2) = 0) Then 
     CarbonFiberListBox2.Items.Clear() 
     CarbonFiberListBox3.Items.Clear() 

     For index As Integer = 0 To countt - 1 Step 1 
      item = Me.CarbonFiberListBox1.Items(Me.randomiser.Next(index, count)) 
      itemz.Add(item) 
      'Me.CarbonFiberListBox1.Items.Remove(item) 
      'Me.CarbonFiberListBox1.Items.Insert(index, item) 
      Me.CarbonFiberListBox2.Items.Insert(index, item) 
     Next index 

     For index As Integer = 0 To countt - 1 Step 1 
      For aa = 0 To bb = 999 
       item = Me.CarbonFiberListBox1.Items(Me.randomiser.Next(index, count)) 
       If Not (itemz.Contains(item)) And Not (repeat.Contains(item)) Then 
        repeat.Add(item) 
        'Me.CarbonFiberListBox1.Items.Remove(item) 
        'Me.CarbonFiberListBox1.Items.Insert(index, item) 
        Me.CarbonFiberListBox3.Items.Insert(index, item) 
       End If 
      Next 
     Next index 

     'For index As Integer = 0 To countt - 1 Step 1 

     'Next index 
    ElseIf count > 0 Then 
     'CarbonFiberButton4.Text = "ODD PARTICIPANTS!" 
    Else 
    End If 
End Sub 

我能得到帮助?我认为这很容易。

回答

0

也许这个小例子会给你一个想法。它通过从一个列表框中以随机顺序获取列表来工作。请注意,由于项目被添加到其他停止重复项目的列表框,所以列表如何被耗尽。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    'some sample data 
    ListBox1.DataSource = {"one", "two", "three", "four", "five", "six", "seven"} 
    DoRandom() 
End Sub 

Private Shared prng As New Random 
Private Sub DoRandom() 
    ListBox2.Items.Clear() 
    ListBox3.Items.Clear() 
    Dim l As New List(Of String) 
    'random order of items in ListBox1 
    l.AddRange(ListBox1.Items.Cast(Of String).OrderBy(Function(s) prng.Next)) 
    'add half to lb2 
    For x As Integer = 0 To l.Count \ 2 
     ListBox2.Items.Add(l(0)) 
     l.RemoveAt(0) 
    Next 

    'remainder to lb3 
    For x As Integer = 0 To l.Count - 1 
     ListBox3.Items.Add(l(0)) 
     l.RemoveAt(0) 
    Next 
End Sub