none
SelectedItemsで複数のアイテムとりたいとき。 RRS feed

  • 質問

  • こんにちは☆

    前にlistviewに表示させたアイテムを取得する際に、

    FocusedItemを使いました。

     

       Dim index As ListView = CType(sender, ListView)
         PictureBox1.Image = Image.FromFile(index.FocusedItem.Text)です。

     

    これで取得は出来ているんですが、アイテム一個取得ではなく、複数のアイテムを4つのpictureboxにそれぞれ違うアイテムを入れたくてSelectedItemsを使おうとしています。

    selecteditem(0)などの使い方がいまいちわかりません。

    宜しくお願い致します
    2007年5月28日 1:50

回答

  • 私も少し誤解を与えるかな~と思いながら先の投稿を書いたのですが、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とかよく目にします。

    2007年5月28日 4:28
    モデレータ

すべての返信

  •  美流久 さんからの引用

    selecteditem(0)などの使い方がいまいちわかりません。

    SelectedItemsそのものがわからないのでしょうか? SelectedItemsと複数形になっていることからもわかりますが、SelectedItemsはListViewで選択されている複数の項目を保持しています。一つ一つはインデックスを指定することにより取り出すことができます。FocusedItemもSelectedItemsに含まれている一つ一つの項目も同じListViewItemですので、プログラム的にはSelectedItemsの中に複数のFocusedItemが入っているように考えることができます。そのように考えてプログラムを記述してみて下さい。

    2007年5月28日 2:25
    モデレータ
  • 本題からは外れますが。

    アイテムを選択することとアイテムにフォーカスを当てることは別物です。ですので、SelectedItem と FocusedItem も意味を異にします。

    例えば、一番上のアイテムを選択し(背景色を反転させ)、Ctrl キーを押しながら下カーソルキーを押してみたり、上二つのアイテムを選択してその二番目のアイテムを Ctrl を押しながらクリックしたりしてみて、SelectedItem(SelectedItems) と FocusedItem を見比べれば、フォーカスってのがどういうものなのか理解できるでしょう。

    2007年5月28日 2:54
  • 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をいれるということですか?)

     

     

    2007年5月28日 3:09
  • Hongliangさん

    回答ありがとうございます

     Hongliang さんからの引用

    本題からは外れますが。

    アイテムを選択することとアイテムにフォーカスを当てることは別物です。ですので、SelectedItem と FocusedItem も意味を異にします。

    例えば、一番上のアイテムを選択し(背景色を反転させ)、Ctrl キーを押しながら下カーソルキーを押してみたり、上二つのアイテムを選択してその二番目のアイテムを Ctrl を押しながらクリックしたりしてみて、SelectedItem(SelectedItems) と FocusedItem を見比べれば、フォーカスってのがどういうものなのか理解できるでしょう。

     

    別物ですかorz

    あ、ってことはSelectedItemsをやろうとしているのに対してFocusedItem は全然別物なんですか☆

    確かに、なんか違和感はありましたが。。。

     

    trapemiyaさんの見た後に書いたんですがスレ前後してすみません

     

     

    2007年5月28日 3:14
  • 私も少し誤解を与えるかな~と思いながら先の投稿を書いたのですが、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とかよく目にします。

    2007年5月28日 4:28
    モデレータ
  •  

     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' に対して有効ではありません。」とエラーがでてしまいます。

     

     

     

    2007年5月28日 8:59
  • 解決しました☆

     

    原因はプロパティの設定をして無かったからでしたw

    プロパティのitems設定をしたところ

     

    dim lv as listview=ctype(sender,listview)

     

    picturebox1.image=image.from(lv.selecteditems(0).text)

    と、selected.countで表示出来ました。

     

    trapemiyaさんどうもありがとうございます☆

    2007年5月28日 9:28