vb.net - 随机播放文本框的内容
问题描述
我试图在 TextBoxes 中以随机顺序显示 10 个不同的输入。
我拆分了 2 个流程以使其更易于理解:
- 按钮将数字按 1-10 的随机顺序排列(有效)
- 按钮应该用文本框的内容替换数字(不起作用)
这是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
解决方案
我对您的目标的理解是将文本放入 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
到网格之后再添加一行。
推荐阅读
- ruby - 如何刷新 CSV::Table 的标题?
- kotlin - Kotlin Kovenant 为所有 Promise 返回相同的对象
- angular - Angular Material DropDown 接受数字数据类型的值
- sql - SQL查询where子句不明确
- python - 进入人物搜索后,无法在 LinkedIn 中选择“所有过滤器” - 无论我尝试什么,Find_element 都不起作用
- excel - 在 Excel 中的两个非常大的列表中查找匹配项
- flutter - StatefulWidget 中默认不调用 initState 函数
- c# - 全局变量、StorageService 和 LocalSettings 的区别
- node.js - GraphQL “必须提供查询字符串” graphql-tag react-apollo
- google-sheets - 谷歌电子表格下拉矩阵