基本上,每当选中其中一个CheckBoxes时,TextBox.Visible属性都将更改为true,并应出现在复选框下方。只要愿意,您都可以选中所有三个(或选中任何组合),只要取消选中它,TextBox就会消失,并且CheckBox会显示为空白/未选中。
我已经到了可以使TextBoxes出现和消失的地步,但是TextBoxes永远不会为空。那里总是有一个黑色的正方形,看起来像这样
那些黑色方块不会消失,我不确定到底是什么问题。仅当CheckBox具有该正方形而不是所需的实际检查时,才会出现TextBox。我使用了If ... ElseIf语句和Select Cases的组合,但尚未完成。我尝试了一些其他事件,例如CheckChanged和Click。
这是我当前使用的允许我切换框的代码。
Private Sub chkBox_Click(sender As Object, e As EventArgs) Handles chkBox.Click
If chkBox.Checked = False Then
txtBox.Visible = False
txtBox.Text = ""
Else
txtBox.Visible = True
End If
chkBox.Checked = True
End Sub
Private Sub chkLawn_Click(sender As Object, e As EventArgs) Handles chkLawn.Click
If chkLawn.Checked = False Then
txtLawn.Visible = False
txtLawn.Text = ""
Else
txtLawn.Visible = True
End If
chkLawn.Checked = True
End Sub
Private Sub chkPav_Click(sender As Object, e As EventArgs) Handles chkPav.Click
If chkPav.Checked = False Then
txtPav.Visible = False
txtPav.Text = ""
Else
txtPav.Visible = True
End If
chkPav.Checked = True
End Sub
如果你们能想到一个解决方案或可以向我指出正确的方向,我将不胜感激。
答案 0 :(得分:0)
我建议在表单加载中使用它来设置复选框和文本框之间的关系:
chkBox.Tag = txtBox
chkLawn.Tag = txtLawn
chkPav.Tag = txtPav
然后是一个处理程序:
Private Sub chkBox_Click(sender As Object, e As EventArgs) Handles chkBox.Click, chkPav.Click, chkLawn.Click
CType(sender.Tag, TextBox).Visible = CType(sender, Checkbox).Checked
End Sub
答案 1 :(得分:0)
这将处理所有CheckBox.CheckChanged事件。它根据CheckBox的名称查找TextBox。因此,只需将它们命名为与您相同的名称(即chkA和txtA)。
Private textBoxPrefix As String = "txt"
Private checkBoxPrefix As String = "chk"
Private Sub chk_CheckedChanged(sender As Object, e As EventArgs) Handles chkBox.CheckedChanged, chkLawn.CheckedChanged, chkPav.CheckedChanged
Dim chk = CType(sender, CheckBox)
Dim suffix = chk.Name.Substring(checkBoxPrefix.Length)
Dim txt = Me.Controls().Find(textBoxPrefix & suffix, True).Single()
txt.Visible = chk.Checked
txt.Text = If(chk.Checked, "", txt.Text)
End Sub
使其更具可伸缩性,以编程方式将处理程序添加到Form_Load的GroupBox中的所有CheckBox中。 (从事件处理程序的声明中删除Handles chkBox.CheckedChanged, chkLawn.CheckedChanged, chkPav.CheckedChanged
)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' assuming the GroupBox is named gbTickets, add all handlers programmatically
For Each chk As CheckBox In Me.gbTickets.Controls.OfType(Of CheckBox)
AddHandler chk.CheckedChanged, AddressOf chk_CheckedChanged
Next
End Sub
答案 2 :(得分:0)
尝试删除.click事件中的chkPav.Checked = True
,chkLawn.Checked = True
和chkBox.Checked = True
。
此外,我会建议使用“ CheckStateChanged” vb.net事件。