首页 > 解决方案 > 随机播放文本框的内容

问题描述

我试图在 TextBoxes 中以随机顺序显示 10 个不同的输入。

我拆分了 2 个流程以使其更易于理解:

  1. 按钮将数字按 1-10 的随机顺序排列(有效)
  2. 按钮应该用文本框的内容替换数字(不起作用)

这是GUI /这里是代码:

    Public tblRandom As New DataTable

    Private Sub btnRandom_Click(sender As Object, e As EventArgs) Handles btnGo.Click
        Dim r As New Random
        Dim tblRandom As New DataTable

        tblRandom.Columns.Add("Order")
        tblRandom.Constraints.Add("pk", tblRandom.Columns(0), True)

        While tblRandom.Rows.Count < 10
            Dim newrow As Object = r.Next(10) + 1
            Try
                tblRandom.Rows.Add(CStr(newrow))
            Catch ex As Exception

            End Try
        End While

        dgvRandom.DataSource = tblRandom
    End Sub

    Private Sub btnReplace_Click(sender As Object, e As EventArgs) Handles btnReplace.Click
        For Each row As DataGridViewRow In dgvRandom.Rows
            For Each cell As DataGridViewCell In row.Cells
                If cell.Value IsNot Nothing Then
                    Dim i As Integer = 0
                    While i < 10
                        i += 1
                        If cell.Value.ToString = i Then
                            cell.Value = ActiveControl.Tag(i)
                        End If
                    End While
                End If
            Next
        Next
        dgvRandom.DataSource = tblRandom
    End Sub

End Class

标签: vb.net

解决方案


我对您的目标的理解是将文本放入 10 个文本框中并对其内容进行洗牌。这DataGrid似乎是您在随机播放期间使用的临时位置。

有一种更简单的方法可以避免所有这些。试试这个代码:

Private _random = New Random()

Private Sub BtnRandom_Click(sender As Object, e As EventArgs) Handles btnRandom.Click
    Dim tbs As TextBox() = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10}
    Dim text = tbs.Select(Function(tb) tb.Text).OrderBy(Function(t) _random.Next()).ToList()
    For Each x In tbs.Zip(text, Function(tb, t) New With {.tb = tb, .t = t})
        x.tb.Text = x.t
    Next
End Sub

就是这样。任务完成。

如果您仍然需要,DataGrid可以很容易地在x.tb.Text = x.t将内容添加x.t到网格之后再添加一行。


推荐阅读