0

したがって、これは私の質問VB.Net グレード配布演習の続きです。

しかし、私が今したいのは、ボタンのクリック時に位置を交換またはランダム化することです。

だから、これは私が取り組んでいるものです:

    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_TextChanged イベントに配置しました

しかし、私は彼らの位置をランダム化する方法を本当に知りません。何か案は?ありがとう。

4

2 に答える 2

2

クラスを使用しますRandom: (より簡潔なバージョンを表示するために編集されています)

Dim grade As Double
If Double.TryParse(txtGrade.Text, grade) Then
    Dim values = {(grade * 40 / 100).ToString(), (grade * 20 / 100).ToString(), (grade * 30 / 100).ToString(), (grade * 10 / 100).ToString()}
    FillRandomControlText({txtA, txtB, txtC, txtD}, values)
End If

この方法で:

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 grade As Double Dim rnd = New Random() Dim controls = {txtA, txtB, txtC, txtD} Dim selectedControls = New List(Of Control) Dim txt As TextBox

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

于 2013-07-25T14:41:16.010 に答える
1

ボタンをクリックしたら、次のList(Of 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)
于 2013-07-25T14:48:00.993 に答える