チェックボックスのチェック状態を取得したいのですが
投稿者 よねKEN  (社会人)
投稿日時
2009/8/25 23:23:51
変数ctrはControl型ですのでCheckedプロパティを使うにはCheckBox型にキャストする必要があります。
For Each ctr As Control In grpA.Controls
If TypeOf ctr Is CheckBox Then
Dim chk As CheckBox = DirectCast(ctr, CheckBox)
If chk.Checked then
'チェックされていた場合の処理
End If
End If
Next
For Each ctr As Control In grpA.Controls
If TypeOf ctr Is CheckBox Then
Dim chk As CheckBox = DirectCast(ctr, CheckBox)
If chk.Checked then
'チェックされていた場合の処理
End If
End If
Next
投稿者 るしぇ  (社会人)
投稿日時
2009/8/25 23:49:59
コンパイル時は、コードで指定された情報に頼るしかないですからね。
実行時にはチェックボックスが入っているとしても、コード上で
Control 型なら、コントロールに共通したメンバしか表示されません。
だからこそ、よねKEN さん御紹介の型変換のコードがあります。
逆にコンパイルを通すだけなら、
でも通ります。
ボタンだったらチェックボックスにする。。。
こんなバカなコードもバカ正直に命令どおり実行してくれます。
。。。で、実行時エラーと。
そんな仕組みになってます。なので型を意識したコーディングが
必要になります。
実行時にはチェックボックスが入っているとしても、コード上で
Control 型なら、コントロールに共通したメンバしか表示されません。
だからこそ、よねKEN さん御紹介の型変換のコードがあります。
逆にコンパイルを通すだけなら、
For Each ctr As Control In grpA.Controls
If TypeOf ctr Is Button Then
Dim chk As CheckBox = DirectCast(ctr, CheckBox)
End If
Next
でも通ります。
ボタンだったらチェックボックスにする。。。
こんなバカなコードもバカ正直に命令どおり実行してくれます。
。。。で、実行時エラーと。
そんな仕組みになってます。なので型を意識したコーディングが
必要になります。
投稿者 大池  (社会人)
投稿日時
2009/8/26 06:08:50
よねKEN様
早速にご指導いただきましてありがとうございます。
るしぇ様
詳細な解説をいただきありがとうございます。
よねKEN様のプログラムを一段と深く理解することができました。
ご両人様ありがとうございました。今後ともよろしくお願いいたします。
早速にご指導いただきましてありがとうございます。
るしぇ様
詳細な解説をいただきありがとうございます。
よねKEN様のプログラムを一段と深く理解することができました。
ご両人様ありがとうございました。今後ともよろしくお願いいたします。
・XPでVB2008 Express Editionを使っています。
・For Each 文でCheckBoxのチェック状態を取得したくつぎのように
したのですが、Checked プロパティが出てきません。このような場合は
どのようにすればいいのでしょうか?
ご教授のほどよろしくお願いいたします。
’
For Each ctr As Control In grpA.Controls
If TypeOf ctr Is CheckBox Then
' Debug.Print(ctr.Name & "=" & ctr.Tag & ":" & ctr.Text)
If ctr.Checked then ・・・と期待していました。
End If
Next