質問

タイトル通り、リストボックスに項目を追加した時に
同じ項目が2つにならないようにするにはどうすればよいでしょうか?

例えば
「あ

う」とリストボックスに入っていたとして
ここに「あ」を追加した時に
「い

あ」という風になるようにしたいです。

ご回答よろしくお願いします。

通報する

回答 (3件)

補足に示した書き方で大丈夫です。あとは***のところに適当な変数名を入れてください。

あるいは次のようにFor Eachの中でAs宣言しちゃっても大丈夫です。

Dim objItems As Object() = {"あ", "い"}

For Each objItem As Object In objItems
AddItem(ListBox1, objItem)
Next

この回答へのお礼

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

#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秒ほどで処理できました。大して問題ないかも??)

この回答への補足

何度も何度も申し訳ないんですが
実際には「あ」「い」が同じ配列の中に代入されているので
配列を1行目から順番に処理するようにしたいんです。

例えば
Dim 配列 As String() ={"あ", "い"}
Dim *** As String

For Each *** In 配列
AddItem(ListBox1,***)
Next

のようにすればできると思っているのですが
間違っているでしょうか。
For Each ~ Nextの使い方がよくわかっていないので
たぶん間違っていると思います。
ご教授よろしくお願いします。

手順としては、
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

この回答への補足

では、もし
リストボックスのアイテムが
「あ

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

このQ&Aは役に立ちましたか?1 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

GoogleChromeで開いているタブをiTunes風にする方法

Google Chromeで、開いているタブをiTunes風にかっこよく表示できるアドオンを紹介します。タブで開いているページすべてを、こんな感じでずらりと立体的に並べて表示できるアドオンです。...


新しく質問する

このカテゴリで人気のQ&Aランキング