4
 Public Class Form1
    Private Function AllEnabled(ByVal b As Boolean) As Boolean
        For i As Integer = 0 To 2
            Dim c As CheckBox = CType(Me.Controls("CheckBox" & i.ToString), CheckBox)
            c.Enabled = b
        Next
    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Call AllEnabled(False)
     End Sub
    End Class

在(对象引用未设置bc.Enabled = b 对象的实例。)

但是当我使用checkbox1.enabled = b而不是c.enabled = b工作正常时。

所以当我看到错误不是b正确的?

& 我怎样才能解决这个问题 ?

4

2 回答 2

2

尝试这个:

For Each ctl In Me.Controls
  If TypeOf ctl Is CheckBox Then
   ctl.Enabled = b
  End If
Next
于 2013-01-30T11:56:33.667 回答
1

两个可能的原因。您的 for 循环创建此控件名称:

  1. “复选框0”
  2. “复选框1”
  3. “复选框2”

也许你想要 1-3 或 0-1。

也许您想递归地找到您的复选框,然后您可以使用Find

For i As Integer = 0 To 2
    Dim ctrl = Me.Controls.Find("CheckBox" & i.ToString, True)
    If ctrl.Length <> 0 Then
        ctrl(0).Enabled = b 'Find returns an aray' 
    End If
Next

旁注:2013 我不会再使用这种 VB6 风格了:

Call AllEnabled(False)

只是

AllEnabled(False)
于 2013-01-30T11:50:26.953 回答