VB.net文本框中数字的随机位置

VB.net文本框中数字的随机位置,vb.net,textbox,Vb.net,Textbox,这只是我问题的继续 但我现在想做的是在点击按钮时交换或随机化它们的位置 这就是我正在做的: If txtGrade.Text <> "" Then If CDbl(txtGrade.Text) Then txtA.Text = (CDbl(txtGrade.Text) * 40) / 100 txtB.Text = (CDbl(txtGrade.Text) * 20) / 100 txtC

这只是我问题的继续

但我现在想做的是在点击按钮时交换或随机化它们的位置

这就是我正在做的:

    If txtGrade.Text <> "" Then
        If CDbl(txtGrade.Text) Then
            txtA.Text = (CDbl(txtGrade.Text) * 40) / 100
            txtB.Text = (CDbl(txtGrade.Text) * 20) / 100
            txtC.Text = (CDbl(txtGrade.Text) * 30) / 100
            txtD.Text = (CDbl(txtGrade.Text) * 10) / 100
        End If
    End If
如果txtGrade.Text为“”,则
如果是CDbl(txtGrade.Text),则
txtA.Text=(CDbl(txtGrade.Text)*40)/100
txtB.Text=(CDbl(txtGrade.Text)*20)/100
txtC.Text=(CDbl(txtGrade.Text)*30)/100
txtD.Text=(CDbl(txtGrade.Text)*10)/100
如果结束
如果结束
更新: 我把上面的代码放在txtGrade\u TextChanged事件上


但我真的不知道如何随机化他们的位置。有什么想法吗?谢谢。

使用
Random
类:(编辑以显示更简洁的版本)

使用此方法:

Shared Sub FillRandomControlText(txtControls As IList(Of TextBox), values As IList(Of String))
    Dim rnd = New Random()
    Dim txt As TextBox
    Dim selectedControls = New List(Of Control)(txtControls.Count)
    For i As Int32 = 0 To txtControls.Count - 1
        Do
            txt = txtControls(rnd.Next(txtControls.Count))
        Loop While selectedControls.Contains(txt)
        selectedControls.Add(txt)
        txt.Text = values(i)
    Next
End Sub
暗等级为双倍 Dim rnd=新随机数() Dim控件={txtA、txtB、txtC、txtD} Dim selectedControls=新列表(控件) 将文本框设置为文本框

If Double.TryParse(txtGrade.Text, grade) Then
    Do
        txt = controls(rnd.Next(controls.Length))
    Loop While selectedControls.Contains(txt)
    selectedControls.Add(txt)
    txt.Text = (grade * 40 / 100).ToString()
    Do
        txt = controls(rnd.Next(controls.Length))
    Loop While selectedControls.Contains(txt)
    selectedControls.Add(txt)
    txt.Text = (grade * 20 / 100).ToString()
    Do
        txt = controls(rnd.Next(controls.Length))
    Loop While selectedControls.Contains(txt)
    selectedControls.Add(txt)
    txt.Text = (grade * 30 / 100).ToString()
    Do
        txt = controls(rnd.Next(controls.Length))
    Loop While selectedControls.Contains(txt)
    txt.Text = (grade * 10 / 100).ToString()
End If

使用
Random
类:(编辑以显示更简洁的版本)

使用此方法:

Shared Sub FillRandomControlText(txtControls As IList(Of TextBox), values As IList(Of String))
    Dim rnd = New Random()
    Dim txt As TextBox
    Dim selectedControls = New List(Of Control)(txtControls.Count)
    For i As Int32 = 0 To txtControls.Count - 1
        Do
            txt = txtControls(rnd.Next(txtControls.Count))
        Loop While selectedControls.Contains(txt)
        selectedControls.Add(txt)
        txt.Text = values(i)
    Next
End Sub
暗等级为双倍 Dim rnd=新随机数() Dim控件={txtA、txtB、txtC、txtD} Dim selectedControls=新列表(控件) 将文本框设置为文本框

If Double.TryParse(txtGrade.Text, grade) Then
    Do
        txt = controls(rnd.Next(controls.Length))
    Loop While selectedControls.Contains(txt)
    selectedControls.Add(txt)
    txt.Text = (grade * 40 / 100).ToString()
    Do
        txt = controls(rnd.Next(controls.Length))
    Loop While selectedControls.Contains(txt)
    selectedControls.Add(txt)
    txt.Text = (grade * 20 / 100).ToString()
    Do
        txt = controls(rnd.Next(controls.Length))
    Loop While selectedControls.Contains(txt)
    selectedControls.Add(txt)
    txt.Text = (grade * 30 / 100).ToString()
    Do
        txt = controls(rnd.Next(controls.Length))
    Loop While selectedControls.Contains(txt)
    txt.Text = (grade * 10 / 100).ToString()
End If

单击按钮后,您需要将要交换/随机化/洗牌的值存储到一个
列表(共T个)
,如下所示:

Dim ValuesToShuffle = New List(Of String)
ValuesToShuffle.Add(txtA.Text)
ValuesToShuffle.Add(txtB.Text)
ValuesToShuffle.Add(txtC.Text)
ValuesToShuffle.Add(txtD.Text)
Dim rand = New Random()

For counter = 0 to ValuesToShuffle.Count- 1
    Dim n = rand.Next(counter + 1)
    Dim temp = ValuesToShuffle(counter)
    ValuesToShuffle(counter) = ValuesToShuffle(n)
    ValuesToShuffle(n) = temp
Next
txtA.Text = ValuesToShuffle(0)
txtB.Text = ValuesToShuffle(1)
txtC.Text = ValuesToShuffle(2)
txtD.Text = ValuesToShuffle(3)
现在,您将循环遍历这些值,以便每次洗牌并生成一个随机数,并将值四处移动,如下所示:

Dim ValuesToShuffle = New List(Of String)
ValuesToShuffle.Add(txtA.Text)
ValuesToShuffle.Add(txtB.Text)
ValuesToShuffle.Add(txtC.Text)
ValuesToShuffle.Add(txtD.Text)
Dim rand = New Random()

For counter = 0 to ValuesToShuffle.Count- 1
    Dim n = rand.Next(counter + 1)
    Dim temp = ValuesToShuffle(counter)
    ValuesToShuffle(counter) = ValuesToShuffle(n)
    ValuesToShuffle(n) = temp
Next
txtA.Text = ValuesToShuffle(0)
txtB.Text = ValuesToShuffle(1)
txtC.Text = ValuesToShuffle(2)
txtD.Text = ValuesToShuffle(3)
最后,将洗牌后的值放回文本框,如下所示:

Dim ValuesToShuffle = New List(Of String)
ValuesToShuffle.Add(txtA.Text)
ValuesToShuffle.Add(txtB.Text)
ValuesToShuffle.Add(txtC.Text)
ValuesToShuffle.Add(txtD.Text)
Dim rand = New Random()

For counter = 0 to ValuesToShuffle.Count- 1
    Dim n = rand.Next(counter + 1)
    Dim temp = ValuesToShuffle(counter)
    ValuesToShuffle(counter) = ValuesToShuffle(n)
    ValuesToShuffle(n) = temp
Next
txtA.Text = ValuesToShuffle(0)
txtB.Text = ValuesToShuffle(1)
txtC.Text = ValuesToShuffle(2)
txtD.Text = ValuesToShuffle(3)

单击按钮后,您需要将要交换/随机化/随机排列的值存储到
列表(共T个)
,如下所示:

Dim ValuesToShuffle = New List(Of String)
ValuesToShuffle.Add(txtA.Text)
ValuesToShuffle.Add(txtB.Text)
ValuesToShuffle.Add(txtC.Text)
ValuesToShuffle.Add(txtD.Text)
Dim rand = New Random()

For counter = 0 to ValuesToShuffle.Count- 1
    Dim n = rand.Next(counter + 1)
    Dim temp = ValuesToShuffle(counter)
    ValuesToShuffle(counter) = ValuesToShuffle(n)
    ValuesToShuffle(n) = temp
Next
txtA.Text = ValuesToShuffle(0)
txtB.Text = ValuesToShuffle(1)
txtC.Text = ValuesToShuffle(2)
txtD.Text = ValuesToShuffle(3)
现在,您将循环遍历这些值,以便每次洗牌并生成一个随机数,并将值四处移动,如下所示:

Dim ValuesToShuffle = New List(Of String)
ValuesToShuffle.Add(txtA.Text)
ValuesToShuffle.Add(txtB.Text)
ValuesToShuffle.Add(txtC.Text)
ValuesToShuffle.Add(txtD.Text)
Dim rand = New Random()

For counter = 0 to ValuesToShuffle.Count- 1
    Dim n = rand.Next(counter + 1)
    Dim temp = ValuesToShuffle(counter)
    ValuesToShuffle(counter) = ValuesToShuffle(n)
    ValuesToShuffle(n) = temp
Next
txtA.Text = ValuesToShuffle(0)
txtB.Text = ValuesToShuffle(1)
txtC.Text = ValuesToShuffle(2)
txtD.Text = ValuesToShuffle(3)
最后,将洗牌后的值放回文本框,如下所示:

Dim ValuesToShuffle = New List(Of String)
ValuesToShuffle.Add(txtA.Text)
ValuesToShuffle.Add(txtB.Text)
ValuesToShuffle.Add(txtC.Text)
ValuesToShuffle.Add(txtD.Text)
Dim rand = New Random()

For counter = 0 to ValuesToShuffle.Count- 1
    Dim n = rand.Next(counter + 1)
    Dim temp = ValuesToShuffle(counter)
    ValuesToShuffle(counter) = ValuesToShuffle(n)
    ValuesToShuffle(n) = temp
Next
txtA.Text = ValuesToShuffle(0)
txtB.Text = ValuesToShuffle(1)
txtC.Text = ValuesToShuffle(2)
txtD.Text = ValuesToShuffle(3)


哎哟“这看起来不太枯燥。”@neolik:不过,也不太枯燥,因为我不知道这些不同因素背后的逻辑,所以我把它保持原样。需要一种方法;)@Neolisk:更好?;-)是的,差不多+谢谢你的努力。哎哟。。。“这看起来不太枯燥。”@neolik:不过,也不太枯燥,因为我不知道这些不同因素背后的逻辑,所以我把它保持原样。需要一种方法;)@Neolisk:更好?;-)是的,差不多+感谢您的努力。感谢我将列表(T)放在哪里?在按钮的单击处理程序中,或者放在由单击处理程序调用的单独方法中。我会让它按照您的意愿工作,然后重构为单独的方法,可能是一种实用方法,可供您的应用程序中的其他代码/页面使用。好吧,但我在这里遇到了一个问题,即:“Length”不是System.Collections.Generic.ListAh的成员。抱歉,我打字太快,脑子出了个屁,这应该是
Count
而不是
Length
。更新答案。@Dunkey-很好,祝你的成绩分配练习顺利。如果你觉得这个答案对你有帮助,请随意接受。谢谢,我把列表(T)放在哪里?放在按钮的点击处理程序中,或者放在点击处理程序调用的单独方法中。我会让它按照您的意愿工作,然后重构为单独的方法,可能是一种实用方法,可供您的应用程序中的其他代码/页面使用。好吧,但我在这里遇到了一个问题,即:“Length”不是System.Collections.Generic.ListAh的成员。抱歉,我打字太快,脑子出了个屁,这应该是
Count
而不是
Length
。更新答案。@Dunkey-很好,祝你的成绩分配练习顺利。如果你觉得这个答案对你有帮助,请随意接受。