どうも、sender や e を上手に利用出来ません。 と、再認識。 X(
単に、知識不足なのですが、
忘れない様に、コードと共に、書き残して置きましょう。
CheckedListBox は 使う側からすれば 便利な筈です。
でも、コードを書く側からすれば、
ListBox や CheckBox の様に、頻度が高い訳では無いでしょう。
ですから、
躓き躓き の コード書き になる訳ですが、
どうも、冒頭に書いた様に、
sender や e を上手に使いこなしていません!、 私の場合 ... 。
勿論、これって、
CheckedListBox に限った事ではありませんが ... 。
イベントハンドラーに渡される値。
これって、便利な筈ですが、
どうも、思考回路から抜け落ちて仕舞い勝ちなのです。
さて、懸案のコード。
CheckedListBox (CheckedListBox1) で、
チェックが外れた時に、
フィールド変数 (exceptItems) に項目名を追加する もの です。
プログラム内で、
或る条件で一部がチェックされた項目をリストするとします。
このチェック有無混在から、
ユーザーが手動でチェックを外したものを認識したいのです。
色々な方法が考えられると思いますが、
この方法が簡単な気がします。
Private exceptItems As New List(Of String) 'CheckedListBox1 UnChecked
Private Sub CheckedListBox1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck
'Dim itemNow As String = Me.CheckedListBox1.Items(e.Index).ToString
If e.NewValue Then 'Checked > Except Form exceptItems
If exceptItems.Contains(Me.CheckedListBox1.Items(e.Index).ToString) Then
exceptItems.Remove(Me.CheckedListBox1.Items(e.Index).ToString)
End If
Else 'UnChecked
If Not exceptItems.Contains(Me.CheckedListBox1.Items(e.Index).ToString) Then
exceptItems.Add(Me.CheckedListBox1.Items(e.Index).ToString)
End If
' Not Support UnCheck
' e.NewValue = CheckState.Checked
End If
End Sub
新たなチェック追加には何も対応していません。
一度消して再び追加したもの のみ、対応しています。
Sub CheckedListBox1_ItemCheck の中で、
コメントアウト部分を活かせば、
チェック解除を無視も出来ます。
その場合、なら、普通の ListBox で いいじゃん 、とも言えますけれど ... 。
謂わば、 チェック部分は外れない 変な奴 ... 。 ;)
0 件のコメント:
コメントを投稿