Vb.net 循环组合框和内部变量

Vb.net 循环组合框和内部变量,vb.net,loops,variables,combobox,Vb.net,Loops,Variables,Combobox,我有以下代码: Dim val1,val2,val3,val4,val5, ... ,val20 As String If Combobox1.SelectedIndex = 0 Then val1=">" else val1="<" end if If Combobox2.SelectedIndex = 0 Then val2=">" else val2="<" end if Dim val1,val2,val3,val4,val5,val2

我有以下代码:

Dim val1,val2,val3,val4,val5, ... ,val20 As String

If Combobox1.SelectedIndex = 0 Then
   val1=">"
else
   val1="<"
end if

If Combobox2.SelectedIndex = 0 Then
   val2=">"
else
  val2="<"
end if
Dim val1,val2,val3,val4,val5,val20作为字符串
如果Combobox1.SelectedIndex=0,则
val1=“>”
其他的
val1=“”
其他的

val2=“要循环表单上的控件,请使用
Me.controls
。要检查控件的类型,请使用
control.GetType.Name

问题是像
val1、val2、val3…等单独的变量不能轻易地在循环中使用,因此我建议将它们更改为列表

Dim val As New List(Of String)

For Each MyControl In Me.Controls
    If MyControl.GetType.Name = "ComboBox" Then
        Dim MyComboBox As ComboBox = CType(MyControl, ComboBox)
        If MyComboBox.SelectedIndex = 0 Then
            val.Add(">")
        Else
            val.Add("<")
        end if
    End If
Next
Dim val作为新列表(字符串)
对于Me.Controls中的每个MyControl
如果MyControl.GetType.Name=“ComboBox”,则
将MyComboBox设置为组合框=CType(MyControl,组合框)
如果MyComboBox.SelectedIndex=0,则
val.Add(“>”)
其他的

val.Add(“所以,这里有一些循环序列供您使用。免责声明-代码未经测试,可能存在错误,但逻辑布局应该正确

Private _numOfControls As Integer = 20
Private _variables As New Dictionary(Of String, String)(_numOfControls)

Private Sub Setup()

    For i as integer = 1 To _numOfControls 

        Dim cboName As String = "cbo" & i
        Dim cbo As New ComboBox()
        cbo.Name = cboName 
        cbo.SelectedIndex = 0
        ' Add cbo location according to your logic here
        container.Controls.Add(cbo) ' container - any control or form that hosts cbo

        _variables.Add(cboName, ">")
        AddHandler cbo.SelectedIndexChanged, AddressOf OnCboSelectedIndexChanged
    Next
End Sub

' If you do this way, your control-related variable will have appropriate equality sign without need for iteration
Private Sub OnCboSelectedIndexChanged (sender As Object, e As EventArgs)

    Dim cbo As ComboBox = CType(sender, ComboBox)
    myDict(cbo.Name) = If(cbo.SelectedIndex = 0, ">", "<")

End Sub

' But if you do not want to do in the above^^ way, you can iterate dictionary
Private Sub FromDictionaryToCbo()
    ' Here you can't use for-loop on dictionary because your dictionary will be mutating. So lets iterate keys
    For Each k As String In _variables.Keys.ToArray())

        _variables(k) = If(CType(container.Find(k, True), ComboBox).SelectedIndex = 0, ">", "<")

    Next
End Sub

' And iterating combo boxes would be something similar as another answer here
' But we use our naming convention to bypass other controls
Private Sub FromCboToDictionary()

    Dim c As Control
    For i As Integer = 1 To < _numOfControls
        Dim key As String = "cbo" & i.ToString()

        'We don't know, may be there some other combo boxes are there, so we use our naming convention instead of control type 
        c = container.Find(key, True)

        If c IsNot Nothing Then

            _variables(key) = If(CType(c, ComboBox).SelectedIndex = 0, ">", "<")    
        end If       
    Next

End Sub
Private\u numOfControls作为整数=20
私有变量作为新字典(字符串、字符串)(\u numf控件)
专用子设置()
对于i作为整数=1到_numo
将cboName设置为String=“cbo”&i
将cbo设置为新组合框()
cbo.Name=cboName
cbo.SelectedIndex=0
'根据此处的逻辑添加cbo位置
container.Controls.Add(cbo)'容器-承载cbo的任何控件或窗体
_变量。添加(cboName,“>”)
AddHandler cbo.SelectedIndex已更改,OnCBOSelectedIndex的地址已更改
下一个
端接头
'如果这样做,您的控件相关变量将具有适当的等号,而无需迭代
私有子OnCboSelectedIndexChanged(发送方作为对象,e作为事件参数)
Dim cbo As COMBOX=CType(发送方,ComboBox)

myDict(cbo.Name)=如果(cbo.SelectedIndex=0,“>”,“,”,"他将如何将值与组合框匹配?不一定要使用字典或映射对象列表。这取决于他的设计,我们不知道。他最初有
val1,val2…等
,映射到
ComboBox1,ComboBox2…等
,所以我假设索引映射就足够了。如果他的表单打开了组合框按照这个顺序,列表的索引就足够映射了,不需要字典。这样
val(0)
将映射到
ComboBox1
val(1)
将映射到
ComboBox2
…等等@RacilHilan谢谢你,但是如果我这样使用,我必须声明每个“val”的值无法将其声明为一个组。我的目标是使用多个循环使代码尽可能少。或者我缺少什么?我不确定我是否理解您的评论。这是可能最短的代码。
val
是一个列表,每个
ComboBox
@RacilHilan都有一个值。很抱歉,响应太晚,是的,code很酷。但我必须键入Dim val1作为string=“”来设置值。我必须逐个键入。我不能键入Dim val1、val2、val3作为string=“”。这里有一个警告“变量在赋值之前已被使用”。如果我只能键入一行,那就太好了。因为我必须打印代码,我希望我的代码看起来简短而困难:)您可以缩短代码
val1=If(Combobox1.SelectedIndex=0,“>”,“val1、val2、val3等是否在方法中声明为局部变量?……或者它们是类级变量?使用组合框名称作为键的字典可能更容易实现这一点。@Idle\u请注意我刚才说的(下面)@谢谢,我会用的。但是有可能循环吗?因为我真的很想循环。嗯,我是个女孩,一个学生,仅供参考。^ ^ ^空闲^注意这是我真正想做的。我是新来的,所以我不知道如何设计一个好的程序。