Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net使用变量按名称循环控件_Vb.net_Loops_Controls - Fatal编程技术网

VB.Net使用变量按名称循环控件

VB.Net使用变量按名称循环控件,vb.net,loops,controls,Vb.net,Loops,Controls,我需要设置一些控件的文本 我有一个表单和一些复选框和一些文本框 在VBA(如果我有5个名为“TextBox1”、“TextBox2”、“TextBox5”的文本框),我可以使用如下内容: For n = 1 To 5 Me("TextBox" & n).Text = NeededValue Next n 我知道在VB.Net中也可以这样做,但我找不到正确的语法(我也没有找到类似的代码) 我试过使用 Me.Controls() 但我不能这样插入控件名 Me.Controls

我需要设置一些控件的文本

我有一个
表单
和一些
复选框
和一些
文本框

VBA
(如果我有5个名为“TextBox1”、“TextBox2”、“TextBox5”的文本框),我可以使用如下内容:

For n = 1 To 5
    Me("TextBox" & n).Text = NeededValue 
Next n
我知道在
VB.Net
中也可以这样做,但我找不到正确的语法(我也没有找到类似的代码)

我试过使用

Me.Controls() 
但我不能这样插入控件名

Me.Controls.Find("TextBox" & n, True)
将采用与VBA样式类似的方法


与您的VBA风格类似。

对每个使用
,然后使用
类型
进行测试,以查找
表单中的所有
文本框
,如:

For Each myObject1 As [Object] In Me.Controls
     If TypeOf myObject1 Is TextBox Then
         TryCast(myObject1, TextBox).Text = "NeededValue"
     End If
Next
此外:

 Dim myText = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
        For Each btn In myText
            btn.Text = "NeededValue"
        Next

For i As Int32 = 1 To 5
    Dim Txt = Me.Controls.Find("TextBox" & i, True)
    If Txt.Length > 0 Then
        Txt(0).Text = "blah"
    End If
Next
或:


对每个
使用
,然后使用
TypeOf
进行测试,以查找您的
表单中的所有
文本框
,如:

For Each myObject1 As [Object] In Me.Controls
     If TypeOf myObject1 Is TextBox Then
         TryCast(myObject1, TextBox).Text = "NeededValue"
     End If
Next
此外:

 Dim myText = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
        For Each btn In myText
            btn.Text = "NeededValue"
        Next

For i As Int32 = 1 To 5
    Dim Txt = Me.Controls.Find("TextBox" & i, True)
    If Txt.Length > 0 Then
        Txt(0).Text = "blah"
    End If
Next
或:


如果有人决定使用更好的(更有意义的)控件名怎么办?这会悄悄地破坏你的代码。不要让您的逻辑依赖于控件名称。@TimSchmelter我使用了“有意义的”控件名称,但我需要显示和获取值,只有其中一些(我没有更好的想法)建议是合适的。您可以将它们分组到容器控件中,如
面板
分组框
。然后很简单:
Dim mytextboxs=textBoxPanel.Controls.OfType(Of TextBox.ToArray()
@TimSchmelter它们已经进入了一个面板。我大概有4排。每个都有一个组合框和五个文本框。我需要根据DataTable.Rows.Count(1到4)从DataTable中插入值。如果数据在DataTable中,DataGridView听起来会更合适、更容易。如果有人决定使用更好(更有意义)的控件名称,该怎么办?这会悄悄地破坏你的代码。不要让您的逻辑依赖于控件名称。@TimSchmelter我使用了“有意义的”控件名称,但我需要显示和获取值,只有其中一些(我没有更好的想法)建议是合适的。您可以将它们分组到容器控件中,如
面板
分组框
。然后很简单:
Dim mytextboxs=textBoxPanel.Controls.OfType(Of TextBox.ToArray()
@TimSchmelter它们已经进入了一个面板。我大概有4排。每个都有一个组合框和五个文本框。我需要根据DataTable.Rows.Count(1到4)从DataTable中插入值。如果数据在DataTable中,DataGridView听起来会更合适、更容易。我在尝试设置
文本时出错。无法将
Control()
转换为
ComboBox
(我使用了
CType(.Find(“CBox\u阶段”&r,True),ComboBox)
returnvalue是一个控件数组。您必须使用第一个控件并将其转换为文本框。我建议您考虑一下处理控件的方法。我不认为这是一种按名称迭代控件的好方法。正如我看到您来自VBA一样,我只能建议您从头开始重新学习VB.NET,忘记VB另一种方法是将所有要更改文本的控件存储在表单中的列表(文本框的列表)中,这样您就可以对每个控件和列表进行更改。当我尝试设置
text
时,我会出错。无法将
Control()
转换为
ComboBox
(我使用了
CType(.Find(“CBox\u阶段”&r,True),组合框)
returnvalue是一个控件数组。您必须使用第一个控件并将其转换为文本框。我建议您考虑一下处理控件的方法。我不认为这是一种按名称迭代控件的好方法。正如我看到您来自VBA一样,我只能建议您从头开始重新学习VB.NET,忘记VB另一种方法是将所有要更改文本的控件存储在表单的列表(文本框)中,这样您就可以对每个控件和列表进行更改。