将CheckListBox与RNG值匹配

时间:2016-03-16 21:02:36

标签: vb.net

我正在制作一个彩票计划,其中包含一个清单框中的99个复选框。然后我在标签中生成5个随机的唯一数字。我是否最好使用嵌套的If语句来检测我选择的任何数字是否与任何生成的数字匹配,或者其他更好的东西?这就是我正在使用的不起作用。

Dim Matched As Integer = 0
    If PickedNumbers.Contains(value) Then Matched += 1

值包含随机数,PickedNumbers是我在checklistbox中选择的数字。

更新:

For Each n As Int32 In WinMatches
        WinningNumbers.Text = ("We matched on:" & " " & n & "!")
    Next

我只能得到这个以返回1个匹配的号码。

2 个答案:

答案 0 :(得分:1)

不要将标签用于显示中奖号码以外的任何其他内容,特别是因为如果您将所有获胜者粘合成一个字符串(根据您的上一个问题),它不会是原子的。 CheckedItems集合将包含数据,但是作为文本,因此您需要将它们转换为整数以进行比较:

Dim winners = Enumerable.Range(1, 99).OrderBy(Function(r) RNG.Next()).Take(5).ToArray

lblWinners.Text = String.Join(", ", winners)

Dim pick As Int32
Dim Matches As Int32
For n As Int32 = 0 To clbPicks.CheckedItems.Count - 1

    pick = Convert.ToInt32(clbPicks.CheckedItems(n))
    If (winners.Contains(pick)) Then
        Matches += 1
    End If

Next

如果你喜欢单行的内容:

Dim WinMatches = clbPicks.CheckedItems.Cast(Of String).
                   Where(Function(m) winners.Contains(Convert.ToInt32(m))).
                   ToArray()

Dim winValues = Array.ConvertAll(WinMatches, Function(i) Convert.ToInt32(i))

这也将为您提供WinMatches中匹配的项目/选择(尽管是字符串)。下一行将它们转换为整数值。结果:

For Each n As Int32 In WinMatches
    Console.WriteLine("Winner-Winner, Chicken Dinner on {0}", n)
Next
  

获奖者 - 获奖者,7日鸡肉晚餐   获奖者,18岁的鸡肉晚餐   获奖者,40岁的鸡肉晚餐

答案 1 :(得分:0)

您可以使用For Each语句。

示例

这将查看每个复选框,并检查是否已选中,是否“执行某些操作”。您可以将每个复选框值放在其Text属性中,然后使用它来计算出已选择的值。

Dim cControl As Control
        For Each cControl InMe.Controls
            If (TypeOf cControl Is CheckBox) Then
              If cControl.Checked = True Then
              value += cControl.Text
              End If

            End If
        Next cControl