イメージのサイズを変更するためのWinFormsプログラムを、C#で作成しています。画像ListViewで選択した項目のインデックスを取得するにはどうすればよいですか?
私はListViewを持っています。このListViewの項目はImageListの画像です。
ImageListとListViewは、ユーザーが画像をドラッグしてフォームにドロップすると設定されます。
ImageListとListViewと同時に読み込まれる2つの文字列配列imageFilePaths []とimageFileNames [](これはかなりわかりやすい)も作成しました。
これらのオブジェクトのすべての4つは、イメージリスト、完全リストビュー、imageFilePaths []とimageFileNames []マッチアップのインデックスので、dragDropの各方法で反復を通して移入された通りです。
私はListViewのイベントリスナーを持っています。 ListView内の項目をクリックすると、前述の配列からListView.SelectedItemsインデックスと一致するインデックス位置にファイル名とファイルパスが取得されます。コードは次のとおりです。
private void imageListView_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (ListViewItem item in imageListView.SelectedItems)
{
int imgIndex = item.ImageIndex;
if (imgIndex >= 0 && imgIndex < imageList1.Images.Count)
{
filenameTb.Text = imageFileNames[imgIndex];
updateDimensions(imageFilePaths[imgIndex]);
}
}
}
これは機能しますが、私は好きではありません。たとえば、ListViewに20個の画像があり、Shiftキーを押しながら項目をエリア選択しようとすると、すべての項目がハイライト表示されるまでに約10〜20秒かかります。 私は「選択を解除」ボタンがあるので、これは私にとって重要です。アイテムを「選択解除」するのと同じくらい時間がかかります。
これは、このイベントリスナーがすべての単一アイテムをループしているため、選択された各アイテムのサイズとファイル名が最後のものになるまで表示されるためです。
これを書き直して、選択したアイテムのみのインデックスを取得したり、複数のアイテムを選択した場合は、最後のインデックスを取得することができますか?
おかげ
編集:コメントに基づいて、私はSelectedIndicesプロパティを見上げて、これを試してみた:
private void imageListView_SelectedIndexChanged(object sender, EventArgs e)
{
ListView.SelectedIndexCollection indexes = this.imageListView.SelectedIndices;
foreach (int index in indexes)
{
filenameTb.Text = imageFileNames[index];
updateDimensions(imageFilePaths[index]);
}
}
それは...しかしまだ
あなたはインデックスのみを使用しています。私はあなたが常に呼び出し側に完全なアイテムを返さないように使用できる 'ListView'に' SelectedIndices'プロパティがあると信じています。 – TheLethalCoder
[複数選択リストボックスで最後に選択したアイテムを取得する方法]の複製がありますか?(http://stackoverflow.com/questions/305555/how-to-get-the-last-selected-item-in-multiselect-listbox) – TheLethalCoder
ねえ、私が作った編集を見てください –