C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: CheckedListBoxのItemCheckイベント


(過去ログ 99 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■59327 / inTopicNo.1)  CheckedListBoxのItemCheckイベント
  
□投稿者/ スシロー (1回)-(2011/05/22(Sun) 15:26:01)

分類:[VB.NET/VB2005 以降] 

使用言語:VB 2008

CheckedListBoxでチェック状態に変更があった場合、リストに一つでもチェックがあるかどうかを調べ、
実行ボタンのEnabled属性を設定しようと思い、CheckedListBoxのItemCheckでこの処理を行おうとしましたが、
うまく動きません。
色々と調べた結果、ItemCheckイベントは、どうやらチェック状態が切り替わる前に発生してしまうようで、
この段階では、リストからはチェック変更後のチェック状況しか取得できないことが分かりました。

MSDNのItemCheckイベントの説明には、「項目のチェック状態が変更されると発生します。」とありますが、
実際にはチェック状態は変更されていなく、また、「ItemCheck イベントが発生するまでは、チェック状態は
更新されません。」とも書いてあり、とても混乱してしまいます。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.checkedlistbox.itemcheck(v=vs.80).aspx

その代わり、ItemCheckのイベントハンドラのe.NewValueより新しいチェック状態を参照することができますので、
チェックされた数を求めるには、CheckedListBoxのCheckedItems.Countを取得し、e.NewValueの内容を元に
カウントを±1をすればいいだろうと思いますが、何だかこれはインチキな裏技のような感じがします。

CheckedListBoxのチェック状態の更新が完了したことを知らせるイベントはないでしょうか?
引用返信 編集キー/
■59329 / inTopicNo.2)  Re[1]: CheckedListBoxのItemCheckイベント
□投稿者/ Hongliang (776回)-(2011/05/22(Sun) 16:43:08)
"ItemCheckChanged" ではなく "ItemCheck" という名前に、変更"後"のイベントではないという意図を込めていると見ることはできますね。Changing じゃないのはキャンセル可能じゃないからかしら?
まあ特にその後のイベントがあるわけでもないようなので、NewValue を参照する方法でいいんじゃないでしょうか。
わざわざ BeginInvoke 使うとかは却って混乱の元でしょうし。
引用返信 編集キー/
■59338 / inTopicNo.3)  Re[2]: CheckedListBoxのItemCheckイベント
□投稿者/ スシロー (2回)-(2011/05/22(Sun) 20:10:54)
No59329 (Hongliang さん) に返信
> "ItemCheckChanged" ではなく "ItemCheck" という名前に、変更"後"のイベントではないという意図を込めていると見ることはできますね。Changing じゃないのはキャンセル可能じゃないからかしら?
> まあ特にその後のイベントがあるわけでもないようなので、NewValue を参照する方法でいいんじゃないでしょうか。

やはりそうですか。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -