ListBox1.SelectedIndicesプロパティについて

タグの編集
投稿者 デフォルト  (社会人) 投稿日時 2009/3/10 04:24:31
ListBox1.SelectedIndicesプロパティは、MSDNで調べると
「ListBox 内で現在選択されているすべての項目の 0 から始まるインデックス番号を格納するコレクショ ンを取得します」

下記は、アイテムを移動させるプログラムですが、コードの中にある

currentindex = ListBox1.SelectedIndices(0)の(0)は、インデックスなのでしょうか?

それともListBox1.SelectedIndices(0)というように表記するべきものと決まっているのでしょうか?


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim currentindex As Integer
        For i As Integer = 0 To ListBox1.SelectedIndices.Count - 1
            currentindex = ListBox1.SelectedIndices(0)


            ListBox2.Items.Add(ListBox1.Items(currentindex))
            ListBox1.Items.RemoveAt(currentindex)

        Next
    End Sub
  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim currentindex As Integer


        For i As Integer = 0 To ListBox2.SelectedIndices.Count - 1
            currentindex = ListBox2.SelectedIndices(0)
            ListBox1.Items.Add(ListBox2.Items(currentindex))
            ListBox2.Items.RemoveAt(currentindex)
        Next

    End Sub
投稿者 デフォルト  (社会人) 投稿日時 2009/3/10 04:49:24
すみません。意味不明な文章で理解できないと思います。
端的に言うと下記のコード何となくわかるのですが
 
ListBox1.SelectedIndices(0)の(0)の部分がいまいち理解できかねています。

 For i As Integer = 0 To ListBox1.SelectedIndices.Count - 1
            currentindex = ListBox1.SelectedIndices(0)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/3/10 05:47:13
> ListBox1.SelectedIndicesプロパティは、

Indices が Index の複数形を現す英単語である事はご存知でしょうか?


> currentindex = ListBox1.SelectedIndices(0)の(0)は、インデックスなのでしょうか?

たとえば、ListBox に、5 つの項目が用意してあるとします。
 0: あああああ
 1: いいいいい
 2: ううううう
 3: えええええ
 4: おおおおお
また、複数選択できるよう、SelecionMode プロパティも変更してある物とします。


ここで、0,1,3 が選択状態になったとしましょう。

この場合、3個選択されているのですから、.SelectedIndices.Count は「3」を返します。そして、
 .SelectedIndices(0) は、最初の選択項目「0」
 .SelectedIndices(1) は、2つ目の選択項目「1」
 .SelectedIndices(2) は、3つ目の選択項目「3」
を返す事になるわけです。ちなみに、.SelectedIndex は最初の選択項目を表すので「0」を返します。


もし、1,4 が選択状態であれば、
 .SelectedIndices.Count は「2」
 .SelectedIndices(0) は「1」
 .SelectedIndices(1) は「4」
 .SelectedIndex は「1」
となります。このような説明で分かりますでしょうか?
投稿者 デフォルト  (社会人) 投稿日時 2009/3/10 06:36:27
仮面の弁士さん、ありがとうございます。
このような理解の仕方でよろしいのでしょうか?

>ここで、0,1,3 が選択状態になったとしましょう。

この場合は、ループが0TO2で3回実行される
1回実行されるごとにアイテムがひとつずつ削除されるので、そのたびにインデックスが、変化する。

currentindex = ListBox1.SelectedIndices(0)
これは先頭のアイテムを削除するということなのですね


>もし、1,4 が選択状態であれば、
 この場合は、2回実行される。
 1回目に先頭のアイテムが削除され、2回目に2つめのアイテムのインデックスが、1→0に変化して
  そのアイテムを削除する
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/3/10 18:16:30
> 仮面の弁士さん
…むぅ。

> このような理解の仕方でよろしいのでしょうか?
OK です。
投稿者 デフォルト  (社会人) 投稿日時 2009/3/10 19:06:24
仮面の弁士さん、ありがとうございました。
また、ご指導よろしくお願いします


ちなみに日本語ももう少し勉強したいと思います。
(きちんとした日本語が書けるように)
投稿者 ヴァン  (社会人) 投稿日時 2009/3/10 19:13:05
こんにちは。

>ちなみに日本語ももう少し勉強したいと思います。

せめて答えてくれた人の名前は間違わないようにしましょう。
投稿者 デフォルト  (社会人) 投稿日時 2009/3/10 19:17:20
>> 仮面の弁士さん
>…むぅ。

全く気づきませんでした。魔界の仮面弁士さんでしたね。大変失礼いたしました。m(_ _)m


>せめて答えてくれた人の名前は間違わないようにしましょう
ヴァンさん、ありがとうございます。今後気をつけたいと思います。