【发布时间】:2018-07-15 06:01:06
【问题描述】:
Public Class Form1
Dim controlNames() As String = {"Tea", "Cola", "Coffee", "Orange", "Water", "VanillaCone", "VanillaShake", "StrawberryShake", "ChocolateMilkshake", "Fries", "Salad", "Hamburger", "OnionRings", "ChickenSalad", "FishSandwich", "CheeseSandwich", "ChickenSandwich"}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
For Each ctrl As Control In Me.Panel2.Controls
If TypeOf ctrl Is TextBox Then
ctrl.Enabled = False
End If
Next
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs)
For i = 0 To 16
For Each ctrl As Control In Me.Panel2.Controls
If TypeOf ctrl Is CheckBox Then
If ctrl.Name = "chk" & controlNames(i) Then
If DirectCast(ctrl, CheckBox).CheckState = CheckState.Checked Then
If TypeOf ctrl Is TextBox Then
If ctrl.Name = "txt" & controlNames(i) Then
ctrl.Enabled = True
End If
End If
End If
End If
End If
Next
Next
End Sub
我有一个 VB.NET 任务,我正在尝试根据是否选中同名复选框来启用文本框。 到目前为止,这是我的代码,它显然不起作用。我想要做的基本上是:
所有文本框都以禁用状态开始。然后,只有在选中相应的复选框时才会启用文本框。例如,如果选中 chkTea,则启用 txtTea。
我知道我可以复制粘贴类似“如果 chkTea = 检查然后 txt.tea = 启用”的内容。我不想这样做,因为这似乎是一种糟糕的方法。我想知道我是否可以做一些像我几乎不可读的代码所示的事情。
【问题讨论】:
-
我认为问题在于嵌套的 IF 语句,如果 ctrl 类型是 CheckBox,你只会寻找 ctrl type Textbox
-
这就是我想要做的......我想......我想检查每个复选框是否勾选,如果勾选,我想启用具有相同的文本框名字。
-
在使用 DirectCast ctrl 的行之后仍将包含 CheckBox - 而不是 TextBox。所以还是需要找到对应的TextBox。
-
那我还能怎么做呢?您能否给我一些伪代码来说明解决我的问题的更好方法是什么?
-
你为什么不使用
CheckBox.CheckChanged事件?
标签: vb.net forms checkbox textbox