我正在尝试动态创建一个复选框数组,并且还希望将事件放入这些复选框。我怎么能这样做?
例如:
我有一系列复选框 - Chk1,Chk2。
我希望它以这种方式工作:当我检查Chk1时,我想禁用Chk2,当未选中Chk1时,Chk2启用,反之亦然。
非常感谢您的意见。
谢谢,
P.S。:代码在VB.NET中。感谢。
谢谢大家的投入。我真的很感激。也许我之前对我的解释不太清楚。
比方说,我有一个包含6个复选框的数组,我希望它们像这样在组中运行:
当选中Chk1时,Chk2被禁用(灰显),当我们取消选中Chk1时,Chk2被启用,而且反之亦然。
当选中Chk3时,Chk4被禁用,当我们取消选中Chk3时,Chk4被启用,而且反之亦然。
依旧......
因此,这就像数组中的每对复选框一样,彼此执行CheckChanged事件,但不会在任何其他对上执行。所以我认为OptionButton在这种情况下并非如此。
感谢您的任何建议。
答案 0 :(得分:0)
假设它是ASP.Net,看看这个“奇怪”的例子,看它是如何工作的(拿你的数组代替我的静态创建):
Private Sub WebForm1_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
For number As Int32 = 1 To 100
Dim chk As New CheckBox
chk.ID = "chk" & number
chk.Text = chk.ID
chk.AutoPostBack = True
AddHandler chk.CheckedChanged, AddressOf onCheckedChanged
Me.MyChkPanel.Controls.Add(chk)
Next
End Sub
Private Sub onCheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim chk As CheckBox = DirectCast(sender, CheckBox)
Dim number As Int32 = Int32.Parse(chk.ID.Substring("chk".Length))
Dim otherChk As CheckBox
If number Mod 2 = 0 Then
otherChk = DirectCast(Me.MyChkPanel.FindControl("chk" & (number - 1)), CheckBox)
Else
otherChk = DirectCast(Me.MyChkPanel.FindControl("chk" & (number + 1)), CheckBox)
End If
otherChk.Enabled = Not chk.Checked
End Sub
除此之外,我可以订阅Hans的建议,使用RadioButtons或至少CheckBoxList。
答案 1 :(得分:0)
RadioButton会自动执行此操作并且更常规。对于一系列复选框,您可以对整个数组使用单个处理程序:
Private Sub _CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim i As Integer
If sender.checked Then
For i = 0 To UBound(chk)
If chk(i) IsNot sender Then chk(i).Checked = False
Next i
End If
End Sub
请记住,如果对此处理程序进行了更改,则在将chk(i).checked设置为false时会以递归方式调用它。在这种情况下无关紧要,因为当sender.checked为false时,它会跳过所有内容。
如果您需要它,这是设置数组的一种方法。 (设计器中的索引属性在从vb6到.net的升级中消失了,所以你现在必须在代码中创建一个控件数组。)
Public Class Form1
Dim chk(4) As CheckBox
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i, k As Integer
k = 20
For i = 0 To UBound(chk)
chk(i) = New CheckBox
Me.Controls.Add(chk(i))
chk(i).Location = New Point(20, k)
k = k + chk(0).Height * 1.5 ' or some location
chk(i).Text = "Checkbox " & i ' some appropriate text
AddHandler chk(i).CheckedChanged, AddressOf _CheckedChanged
Next i
End Sub