0

C#のListViewには、エントリの追加に使用できる次のaddメソッドがあります

public virtual ListViewItem Add(ListViewItem value)
public virtual ListViewItem Add(string text)
public virtual ListViewItem Add(string text, int imageIndex)
public virtual ListViewItem Add(string text, string imageKey)
public virtual ListViewItem Add(string key, string text, int imageIndex)
public virtual ListViewItem Add(string key, string text, string imageKey)

シナリオ: ListViewがあり、最初の列に独自の画像を含むListViewItemを動的に追加したいと考えています。さらに、これらの画像は状態の変化に応じて更新できます

質問:これをどのように行いますか?

使用しているコード

        private void AddToMyList(SomeDataType message)
        {
            string Entrykey = message.ID;

            //add its 1 column parameters
            string[] rowEntry = new string[1];
            rowEntry[0] = message.name;

            //make it a listviewItem and indicate its row
            ListViewItem row = new ListViewItem(rowEntry, (deviceListView.Items.Count - 1));

            //Tag the row entry as the unique id
            row.Tag = Entrykey;

            //Add the Image to the first column
            row.ImageIndex = 0;

            //Add the image if one is supplied
            imagelistforTypeIcons.Images.Add(Entrykey, message.marker.markerIcon);

            //finally add it to the device list view
            typeListView.Items.Add(row);

        }
4

1 に答える 1

1

あなたがする必要がある2つのことがあります

  • ImageListにまだ含まれていない場合は、ImageListに画像を追加します
  • 新しいListViewItemを作成し、前のポイントからの画像をそれに割り当てます

コードに基づいて、次のようになります。

// Add markerIcon to ImageList under Entrykey
imagelistforTypeIcons.Images.Add(Entrykey, message.marker.markerIcon);
// Use icon from ImageList which is stored under Entrykey
ListViewItem row = new ListViewItem(rowEntry);
row.ImageKey = Entrykey;
// Do whatever else you need afterwards
row.Tag = Entrykey;
....

あなたの質問のコードの問題は(実際に試してみることなく)ImageIndexあなたが割り当てていることにあるようです。

  • ListViewRowある画像リストに新しい画像を追加していますが、別の画像リストから画像を割り当てています
  • コンストラクターで画像インデックスを提供していますが、後で0に設定しています(なぜですか?)
  • 新しい画像を追加する前に、画像リストの最後の画像のインデックスを計算したため、最初に間違った画像インデックスを提供しています。

したがって、コードも次のように問題ない可能性があります。

// Add markerIcon to ImageList under Entrykey
imagelistforTypeIcons.Images.Add(Entrykey, message.marker.markerIcon);
// Use icon from ImageList which is stored under Entrykey
ListViewItem row = new ListViewItem(rowEntry);
row.ImageIndex = imagelistforTypeIcons.Items.Count - 1;
// Do whatever else you need afterwards
row.Tag = Entrykey;
于 2013-03-26T19:11:55.653 に答える