【C#】【VB.NET】CheckedListBoxがチェックされたときにイベントを発生させる
CheckedListBoxのチェック状態が変わったときにItemCheckイベントが発生するんですが、
チェック状態が更新されていないのでItemCheckEventArgsを調べなくてはいけません。
面倒なので簡便な手法がないか調べたところ、
遅延実行を利用するのがシンプルだったので手法をメモします。
参考サイト
stackoverflow.com
C#の場合
/// <summary> /// checkedListBox1のItemCheckイベントハンドラー /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { // チェックされた項目を表示する BeginInvoke(new Action(DisplayCheckedItems)); } /// <summary> /// TextBoxにチェックされた項目を表示します /// </summary> private void DisplayCheckedItems() { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < checkedListBox1.Items.Count; i++) { if (checkedListBox1.GetItemChecked(i)) { stringBuilder.AppendLine($"{checkedListBox1.Items[i].ToString()}がチェックされました"); } } textBox1.Text = stringBuilder.ToString(); }
VB.NETの場合
''' <summary> ''' CheckedListBox1のItemCheckイベントハンドラー ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub CheckedListBox1_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles CheckedListBox1.ItemCheck ' チェックされた項目を表示する BeginInvoke(New Action(AddressOf DisplayCheckedItems)) End Sub ''' <summary> ''' TextBoxにチェックされた項目を表示します ''' </summary> Private Sub DisplayCheckedItems() Dim stringBuilder As New Text.StringBuilder() For index = 0 To CheckedListBox1.Items.Count - 1 If CheckedListBox1.GetItemChecked(index) Then stringBuilder.AppendLine($"{CheckedListBox1.Items(index).ToString()}がチェックされました") End If Next TextBox1.Text = stringBuilder.ToString() End Sub