アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB.NETに関する質問です。

画面の一覧(SPREAD等)にチェックボックスがあり、
全てのチェックボックスにチェックがついているかどうかを調べたいです。

「もし一つでもチェックがついていた場合は、チェック処理から即座に抜け、
もし全てのチェックがついていない場合は、エラーメッセージを出力する」
という動作を求めています。

例えば、

For intRowIndex As integer = 0 To MaxRowCount - 1
If CBool(Cells(intRowIndex, checkboxColumn).Value) Then
'' チェックがついている場合
Exit For
Else
If intRowIndex = MaxRowCount Then
'' エラーメッセージ出力

End If
End If
Next

という処理で求める動きは可能ですが、
もう少しスマートなロジックがないかと考えています。

どなたか教えて頂けませんでしょうか?

A 回答 (2件)

状況がよく分からないので、具体的なコードは載せれませんが


昔はやったビットテーブルの処理ロジックなどに置き換えられるなら、
簡単に出来ると思います。

スプレッドのチェック状態を保持しているビット配列の
ハッシュ値が0なら全てチェックがついていないと見なして
処理を終了等。

まぁスプレッドのチェック状態を保持したビット配列を用意する方がめんどくさいと思いますが。
ちなみにループによる処理自体は、意図が分かりやすいコードなので
第三者がメンテナンスを行う可能性がある場合は、そのコードはそれで十分だと思いますよ。
逆にコアなアルゴリズムを入れると、メンテナンスも難しくなりますし
意図がどんどん分かりにくくなっていく傾向があるので
業務系アプリ等で利用するなら、あまりお勧めしません。
    • good
    • 0

MVC的な考えをきっちり入れているのであれば,単純にModelにチェックメソッドを用意するだけです。


Model側もList(Of T)などで管理しているでしょうから,Enumerable.Any拡張メソッドでチェックできます。

ViewとModelの分離をしていないような場合は,コントロール側が内部の要素情報をIEnuemrableで得られることが多いでしょうから,
それに対してAny拡張メソッドを適用するだけです。

仮コードは
Cells.Cast(Of Row)().Any(Function (r) CBool(r(column).Value))
というような感じでしょうか。
# 標準コントロールにSPREADなるものはなかったはず。
    • good
    • 0

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