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请注意我刚才说的(下面)@谢谢,我会用的。但是有可能循环吗?因为我真的很想循环。嗯,我是个女孩,一个学生,仅供参考。^ ^ ^空闲^注意这是我真正想做的。我是新来的,所以我不知道如何设计一个好的程序。