DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33597 / inTopicNo.1)  文字列配列からCheckedListBoxにチェック適用
  
□投稿者/ あさ 一般人(1回)-(2017/03/02(Thu) 19:32:47)
  • アイコン環境/言語:[Windows10、VB.NET、.NET Framework4.5.2] 
    分類:[.NET] 

    2017/03/02(Thu) 19:35:03 編集(投稿者)

    お世話になります。

    Windows10、VB2015、.NET Framework4.5.2で開発しております。

    次のような文字列配列を、
    CheckedListBoxにおけるチェックに反映させたいと考えております。

    文字列配列「あああ/いいい/おおお」

    CheckedListBoxのclbTest(あらかじめ項目は登録されています)
    □あああ:チェック
    □いいい:チェック
    □ううう
    □えええ
    □おおお:チェック

    そこで、コードを以下のように書きました。

    Dim str1 As String
    Dim str2() As String

    str1="あああ/いいい/おおお"
    str2 = Split(str1, "/")

    For Each strData As String In str2
    For Each Item In clbTest.Items
    If Item.ToString = strData Then
    (チェックをつける)※
    End If
    Next
    Next strData

    このコードで「※」の部分の書き方が分かりません。
    「Item.」まで入力して出てくる候補の中に、
    それらしきものが出てきません。

    For Each Item In clbTest.Items

    を、

    For Each Item As CheckedListBox In clbTest.Items

    にすると候補が増えましたが、該当しそうなものを選んでも、

    うまくいきませんでした。

    「※」の書き方がお分かりになる方がいらっしゃいましたら、

    ご教示頂けましたら幸いです。

    どうぞよろしくお願いします。

引用返信 削除キー/
■33598 / inTopicNo.2)  Re[1]: 文字列配列からCheckedListBoxにチェック適用
□投稿者/ Hongliang 大御所(533回)-(2017/03/02(Thu) 20:51:59)
  • アイコンCheckedListBoxの場合、CheckedListBox自体が各項目のチェック状態等を管理しています。
    特定の項目のチェック状態を変更したい場合、CheckedListBox.SetItemCheckedメソッドを使用します。
    このメソッドの引数には項目のインデックスとチェック有無しか指定できないので、どうにかしてその項目のインデックスを取得する必要があります。
    で、CheckedListBoxに含まれるある項目のインデックスを検索するために、CheckedListBox.FindStringExactメソッドが用意されています。
    これを使えば、ItemsをForEachする必要もなくなります。
引用返信 削除キー/
■33601 / inTopicNo.3)  Re[2]: 文字列配列からCheckedListBoxにチェック適用
□投稿者/ あさ 一般人(2回)-(2017/03/04(Sat) 09:55:02)
  • アイコンNo33598に返信(Hongliangさんの記事)

    ご回答頂きまして、誠にありがとうございます^^。
    早速確認しまして、またご返事させて頂きます。
引用返信 削除キー/
■33602 / inTopicNo.4)  Re[2]: 文字列配列からCheckedListBoxにチェック適用
□投稿者/ あさ 一般人(3回)-(2017/03/04(Sat) 10:02:56)
  • アイコンNo33598に返信(Hongliangさんの記事)

    お世話になります。
    早速試しました。

    For Each strData As String In str2
    clbTest.SetItemChecked(clbTest.FindStringExact(strData), True)
    Next strData

    これでうまくいきました。

    お忙しい中ご教示頂きまして、誠にありがとうございました^^。
解決み!
引用返信 削除キー/
■33603 / inTopicNo.5)  Re[3]: 文字列配列からCheckedListBoxにチェック適用
□投稿者/ 魔界の仮面弁士 大御所(1066回)-(2017/03/06(Mon) 23:53:48)
  • アイコン2017/03/06(Mon) 23:54:00 編集(投稿者)

    No33602に返信(あささんの記事)
    > For Each strData As String In str2
    > clbTest.SetItemChecked(clbTest.FindStringExact(strData), True)
    > Next strData
    > これでうまくいきました。

    「ううう」が最初からチェックされていた状態で実行すると、
    あああ/いいい/おおお が選択された状態ではなく
    あああ/いいい/ううう/おおお が選択された状態になりますね。

    また、CheckedListBox に登録されていない文字列が str2 内に混入した場合
    提示のコードだとエラーになってしまいますので、これらの点を
    見直したバージョンを書いてみました。


    clbTest.BeginUpdate()
    Dim trueIndexes = str2.Select(Function(s) clbTest.FindStringExact(s)).ToArray()
    For i = 0 To clbTest.Items.Count - 1
      clbTest.SetItemChecked(i, trueIndexes.Contains(i))
    Next
    clbTest.EndUpdate()
解決み!
引用返信 削除キー/



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

このトピックに書きこむ

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

Mode/  Pass/


- Child Tree -