• ベストアンサー

[VB2008]リストボックスで項目の重複を避ける

タイトル通り、リストボックスに項目を追加した時に 同じ項目が2つにならないようにするにはどうすればよいでしょうか? 例えば 「あ い う」とリストボックスに入っていたとして ここに「あ」を追加した時に 「い う あ」という風になるようにしたいです。 ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

補足に示した書き方で大丈夫です。あとは***のところに適当な変数名を入れてください。 あるいは次のようにFor Eachの中でAs宣言しちゃっても大丈夫です。 Dim objItems As Object() = {"あ", "い"} For Each objItem As Object In objItems AddItem(ListBox1, objItem) Next

yue_1995
質問者

お礼

解決しました! かなり頭を悩ませていたものだったので ちゃんと動作して気分爽快です! ご丁寧なご回答ありがとうございます!

その他の回答 (2)

回答No.2

#1 Wizard_Zeroです。以下、補足に対する回答です。 単純に考えれば、同じコトを2回やればよいだけです。その場合は、イベントメソッド内ではなく独立したメソッドにしたほうがコーディングの効率があがります。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click AddItem(ListBox1, "あ") AddItem(ListBox1, "い") End Sub ' Controlに指定したリストボックスにItemを追加 ' すでにItemが存在している場合は削除する Private Sub AddItem(ByVal Control As Windows.Forms.ListBox, ByVal Item As Object) Dim intIndexOf As Integer = Control.Items.IndexOf(Item) Do While intIndexOf >= 0 Control.Items.RemoveAt(intIndexOf) intIndexOf = Control.Items.IndexOf(Item) Loop Control.Items.Add(Item) End Sub ただし、リストの項目数が多くなった場合にこの方法だと時間がかかってしまうかもしれませんね・・・。 (ためしに「あ」「い」「う」をそれぞれ1000個ずつ、合計3000アイテムに増やして上記コードを実行してみた結果、0.3秒ほどで処理できました。大して問題ないかも??)

yue_1995
質問者

補足

何度も何度も申し訳ないんですが 実際には「あ」「い」が同じ配列の中に代入されているので 配列を1行目から順番に処理するようにしたいんです。 例えば Dim 配列 As String() ={"あ", "い"} Dim *** As String For Each *** In 配列 AddItem(ListBox1,***) Next のようにすればできると思っているのですが 間違っているでしょうか。 For Each ~ Nextの使い方がよくわかっていないので たぶん間違っていると思います。 ご教授よろしくお願いします。

回答No.1

手順としては、 1. 同じ項目があるかを調べる。 2. 存在する場合はその項目を削除。 3. 1~2で削除する項目がなくなるまで繰り返し、項目を追加 となります。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ListBox1.Items.Add("あ") ListBox1.Items.Add("い") ListBox1.Items.Add("う") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' 追加する項目 Dim strAddItem As Object = "あ" ' 追加する項目をリストから検索 Dim intIndexOf As Integer = ListBox1.Items.IndexOf(strAddItem) ' リストに項目が存在する限りループ Do While intIndexOf >= 0 ' 重複項目を削除 ListBox1.Items.RemoveAt(intIndexOf) ' 再び検索 intIndexOf = ListBox1.Items.IndexOf(strAddItem) Loop ' 項目を追加 ListBox1.Items.Add(strAddItem) End Sub

yue_1995
質問者

補足

では、もし リストボックスのアイテムが 「あ い う」 となっているときに 「い あ」 という項目を追加し、「い」と「あ」で重複チェックをかける場合はどうすればいいでしょうか。 strAddItemにそのまま入れてしまえばいいのでしょうか? ご回答よろしくお願いします。

関連するQ&A