チェックボックスのチェック状態を取得したいのですが への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るしぇ  (社会人)
投稿日時
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
でも通ります。
ボタンだったらチェックボックスにする。。。
こんなバカなコードもバカ正直に命令どおり実行してくれます。
。。。で、実行時エラーと。
そんな仕組みになってます。なので型を意識したコーディングが
必要になります。
投稿者 よね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 22:56:50
いつもお世話になりありがとうございます。
・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
・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
早速にご指導いただきましてありがとうございます。
るしぇ様
詳細な解説をいただきありがとうございます。
よねKEN様のプログラムを一段と深く理解することができました。
ご両人様ありがとうございました。今後ともよろしくお願いいたします。