• ベストアンサー

Checkboxの数え方

完全な素人です 1つのGroupBox内にある複数のCheckboxの中から チェックされているCheckboxの数を数えたいのですが どうしたらいいのでしょうか? ちなみにGroupBoxも複数あります どなたか教えてください、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ttkai00
  • ベストアンサー率58% (18/31)
回答No.3

2002 でしたか。TryCast は 2005 からなのでエラーになりますね。DirectCast は使えましたよね…実はあまり知らないんですが。DirectCast を使うなら以下。 Private Function CountChecked(ByVal targetGroupBox As GroupBox) As Integer Dim cnt As Integer = 0 For Each ctl As Control In targetGroupBox.Controls If TypeOf ctl Is CheckBox Then Dim cb As CheckBox = DirectCast(ctl, CheckBox) If cb.Checked Then cnt += 1 End If End If Next Return cnt End Function DirectCast が使えないようなら、DirectCast を CType に変えてみてください。

napple_001
質問者

お礼

いけました! なぜPrivate Function なんだ?ってところからでしたが 大体理解できました、なんとかV.Bの入口が見えてきた気がします。 ありがとうございました。

その他の回答 (2)

  • ttkai00
  • ベストアンサー率58% (18/31)
回答No.2

VB のバージョンは? 2005 以降だと思って回答しておきます。 こんなメソッドを作ればよいでしょうか。 Private Function CountChecked(ByVal targetGroupBox As GroupBox) As Integer Dim cnt As Integer = 0 For Each ctl As Control In targetGroupBox.Controls Dim cb As CheckBox = TryCast(ctl, CheckBox) If cb IsNot Nothing cnt += 1 End If Next Return cnt End Function

napple_001
質問者

お礼

.Net 2002を使用しているためか、 とりあえずエラーがでてしまいます。 勉強でやっているので参考にさせていただいて後はなんとかやってみます ありがとうございました。

  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

これをうまくアレンジしてやってみてください。 フォーム名とコントロール名を元にオブジェクトを取得します。 ''' <summary> ''' フォームに配置されているコントロールを名前で探す ''' (フォームクラスのフィールドをフィールド名で探す) ''' </summary> ''' <param name="frm">コントロールを探すフォーム</param> ''' <param name="name">コントロール(フィールド)の名前</param> ''' <returns>見つかった時は、コントロールのオブジェクト。 ''' 見つからなかった時は、null(VB.NETではNothing)。</returns> Public Function FindControlByFieldName( _ ByVal frm As Form, ByVal name As String) As Object 'まずプロパティ名を探し、見つからなければフィールド名を探す Dim t As System.Type = frm.GetType() Dim pi As System.Reflection.PropertyInfo = _ t.GetProperty(name, _ System.Reflection.BindingFlags.Public Or _ System.Reflection.BindingFlags.NonPublic Or _ System.Reflection.BindingFlags.Instance Or _ System.Reflection.BindingFlags.DeclaredOnly) If Not pi Is Nothing Then Return pi.GetValue(frm, Nothing) End If Dim fi As System.Reflection.FieldInfo = _ t.GetField(name, _ System.Reflection.BindingFlags.Public Or _ System.Reflection.BindingFlags.NonPublic Or _ System.Reflection.BindingFlags.Instance Or _ System.Reflection.BindingFlags.DeclaredOnly) If fi Is Nothing Then Return Nothing End If Return fi.GetValue(frm) End Function

napple_001
質問者

お礼

ちょっとレベル高そうな感じですね・・・。 勉強して参考にさせて頂きます ありがとうございました。