dポイントプレゼントキャンペーン実施中!

完全な素人です

1つのGroupBox内にある複数のCheckboxの中から
チェックされているCheckboxの数を数えたいのですが
どうしたらいいのでしょうか?
ちなみにGroupBoxも複数あります

どなたか教えてください、宜しくお願いします。

A 回答 (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 に変えてみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/16 16:51

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
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2008/12/15 15:01

これをうまくアレンジしてやってみてください。


フォーム名とコントロール名を元にオブジェクトを取得します。
''' <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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/16 16:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!