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

batでの強調表示でエラーが発生しますc.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

2つの考えられる理由。forループは次のコントロール名を作成します。

  1. 「CheckBox0」
  2. 「CheckBox1」
  3. 「CheckBox2」

代わりに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 に答える