トップ回答者
SelectedItemsで複数のアイテムとりたいとき。

質問
-
こんにちは☆
前にlistviewに表示させたアイテムを取得する際に、
FocusedItemを使いました。
Dim index As ListView = CType(sender, ListView)
PictureBox1.Image = Image.FromFile(index.FocusedItem.Text)です。これで取得は出来ているんですが、アイテム一個取得ではなく、複数のアイテムを4つのpictureboxにそれぞれ違うアイテムを入れたくてSelectedItemsを使おうとしています。
selecteditem(0)などの使い方がいまいちわかりません。
宜しくお願い致します
回答
-
私も少し誤解を与えるかな~と思いながら先の投稿を書いたのですが、Hongliangさんにフォローしていただきました。ありがとうございます。SelectedItemsの中にfocusedItemが複数入っているわけではなく、あくまでそのように考えて今までのプログラムを修正して下さいという意味です。なので、大筋だと以下のようになります。
Dim index As ListView = CType(sender, ListView)
PictureBox1.Image = Image.FromFile(index.SelectedItems(0).Text)
PictureBox2.Image = Image.FromFile(index.SelectedItems(1).Text)
PictureBox3.Image = Image.FromFile(index.SelectedItems(2).Text)
PictureBox4.Image = Image.FromFile(index.SelectedItems(3).Text)
・
・
・
・ただ、ListViewでいくつ選択されているかわかりませんので、そこは工夫が要ります。
いくつ選択されているかは、index.index.SelectedItems.Countなどでわかります。
#ListViewなのにindexという名前はわかりにくいので、もう少し違う名前にしましょう。MyListViewとかlvとかよく目にします。
すべての返信
-
美流久 さんからの引用 selecteditem(0)などの使い方がいまいちわかりません。
SelectedItemsそのものがわからないのでしょうか? SelectedItemsと複数形になっていることからもわかりますが、SelectedItemsはListViewで選択されている複数の項目を保持しています。一つ一つはインデックスを指定することにより取り出すことができます。FocusedItemもSelectedItemsに含まれている一つ一つの項目も同じListViewItemですので、プログラム的にはSelectedItemsの中に複数のFocusedItemが入っているように考えることができます。そのように考えてプログラムを記述してみて下さい。
-
-
trapemiyaさんお久しぶりです☆
早速の回答ありがとうございます。
trapemiya さんからの引用 SelectedItemsと複数形になっていることからもわかりますが、SelectedItemsはListViewで選択されている複数の項目を保持しています。一つ一つはインデックスを指定することにより取り出すことができます。FocusedItemもSelectedItemsに含まれている一つ一つの項目も同じListViewItemですので、プログラム的にはSelectedItemsの中に複数のFocusedItemが入っているように考えることができます。そのように考えてプログラムを記述してみて下さい。ええ、selecteditems自体は分かるんですが、一個一個出す時に(1)(2)といったようにしていくのだとおもいまして。
その(1)や(2)をどうやるのか分からなかったので☆
trapemiya さんからの引用 SelectedItemsの中に複数のFocusedItemが入っているように考えることができます
こう教えていただくと分かりやすいです
selecteditemsの中に複数のfocuseditem入っているということは先程記述した物を変えてみると、こういうことですか?
Dim index As ListView = CType(sender, ListView)
dim select as string
select=index.selecteditems('ココにFocusedItemをいれるということですか?)
-
Hongliangさん
回答ありがとうございます
Hongliang さんからの引用 本題からは外れますが。
アイテムを選択することとアイテムにフォーカスを当てることは別物です。ですので、SelectedItem と FocusedItem も意味を異にします。
例えば、一番上のアイテムを選択し(背景色を反転させ)、Ctrl キーを押しながら下カーソルキーを押してみたり、上二つのアイテムを選択してその二番目のアイテムを Ctrl を押しながらクリックしたりしてみて、SelectedItem(SelectedItems) と FocusedItem を見比べれば、フォーカスってのがどういうものなのか理解できるでしょう。
別物ですかorz
あ、ってことはSelectedItemsをやろうとしているのに対してFocusedItem は全然別物なんですか☆
確かに、なんか違和感はありましたが。。。
trapemiyaさんの見た後に書いたんですがスレ前後してすみません
-
私も少し誤解を与えるかな~と思いながら先の投稿を書いたのですが、Hongliangさんにフォローしていただきました。ありがとうございます。SelectedItemsの中にfocusedItemが複数入っているわけではなく、あくまでそのように考えて今までのプログラムを修正して下さいという意味です。なので、大筋だと以下のようになります。
Dim index As ListView = CType(sender, ListView)
PictureBox1.Image = Image.FromFile(index.SelectedItems(0).Text)
PictureBox2.Image = Image.FromFile(index.SelectedItems(1).Text)
PictureBox3.Image = Image.FromFile(index.SelectedItems(2).Text)
PictureBox4.Image = Image.FromFile(index.SelectedItems(3).Text)
・
・
・
・ただ、ListViewでいくつ選択されているかわかりませんので、そこは工夫が要ります。
いくつ選択されているかは、index.index.SelectedItems.Countなどでわかります。
#ListViewなのにindexという名前はわかりにくいので、もう少し違う名前にしましょう。MyListViewとかlvとかよく目にします。
-
trapemiya さんからの引用 ただ、ListViewでいくつ選択されているかわかりませんので、そこは工夫が要ります。
いくつ選択されているかは、index.index.SelectedItems.Countなどでわかります。
dim lv as listview=ctype(sender,listview)
dim count as string
count=lv.selecteditems().count
msgbox(count)
としてやってみました。項目数取得出来ました。
picturebox1.image=image.fromfile(lv.selecteditems(1).text)
とすると「'1' の InvalidArgument=Value は 'index' に対して有効ではありません。」とエラーがでてしまいます。