如何基于NumericUpDown控件向ListBox添加变量?

时间:2017-11-09 19:07:00

标签: vb.net

我为列表框创建了一个随机骰子生成器,我有一个numericUpDown控件,用于表示每种类型的骰子将被滚动的数量。我目前的代码如下:

RollValue = rand.Next(4) + 1
lstRoller.Items.Add(numD4UpDown.Value.ToString() & "D4 - " & RollValue.ToString())

其中lstRoller是我要添加骰子的列表框,Roll Value是我的变量,numD4UpDown是我的NumericUpDown。这适用于单个掷骰子,但我希望能够在我的updown控件中为每个大于1的数字添加额外的掷骰子,而不必为每个numericUpDown控件可能性编写if语句。

理想情况下,它看起来像这样:

RollValue = rand.Next(4) + 1
lstRoller.Items.Add(numD4UpDown.Value.ToString() & "D4 - " & RollValue.ToString() & If numD4UpDown.Value(Pseudocode past this point).Count > 1 then do create variable = rand.Next(4) + 1 loop until NumberOfVariables = numD4UpDown.Value.Count)

有没有办法在我不必创建个人If语句的地方?

1 个答案:

答案 0 :(得分:1)

  

在我的更新控件

中为每个大于1的数字添加额外的掷骰子

因此,掷骰子的总数基本上等于NumericUpDown中的数字。

使用For循环

Private rand As New Random()
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For i As Integer = 1 To Convert.ToInt32(numD4UpDown.Value)
        Dim rollValue = rand.Next(4) + 1
        lstRoller.Items.Add(String.Format("{0}D4 - {1}", i, rollValue))
    Next
End Sub

如果你想把它全部放在一行上,你可以用

替换For循环
lstRoller.Items.Add(
    Enumerable.Range(1, Convert.ToInt32(numD4UpDown.Value)).
    Select(
        Function(i)
            Dim RollValue = rand.Next(4) + 1
            Return String.Format("{0}D4 - {1}", i, RollValue)
        End Function).
        Aggregate(Function(s1, s2) s1 & " " & s2))