私はImageListの内容を取り込むリストビューを持っています。アイテムがリストから選択されると、ファイルがまだ存在するかどうかがチェックされます。それができない場合は、イメージリスト(プライベート静的)とListViewの両方から削除します。 私は理解できないいくつかの奇妙な理由のために、リストから選択したイメージを削除した後、イメージは消え、リストの最後のイメージは2回現れます。 例えば、リストは以下の画像保持していた場合:IMG1、IMG4、IMG5、IMG5:IMG1、IMG2、IMG3、IMG4、IMG5を、私はIMG2を削除し、新しいリストは次のようになります。私はリストから第2の画像を選択した場合ListViewから画像を削除する際の異常な動作
さらに、一部の画像コントロールに表示、その場所にあると仮定されたIMG3は、コントロールに表示される(今IMG4です)。
ここで何が起こっているのですか?
EDIT:ファイルがまだ存在するかどうかのチェック
private static ImageList stampsImages
if (stampsImages == null)
{
stampsImages = new ImageList();
stampsImages.ImageSize = new Size(125, 75);
}
DirectoryInfo di = new DirectoryInfo(Globals.Directory);
if (di.Exists)
{
FileInfo[] dFiles = di.GetFiles("*.png");
int stampListSize = stampsImages.Images.Count;
for (int i = 0; i < dFiles.Length; i++)
{
int idx = stampsImages.Images.IndexOfKey(dFiles[i].FullName);
if (idx < 0)
{
stampsImages.Images.Add(Bitmap.FromFile(dFiles[i].FullName));
stampsImages.Images[stampListSize].Tag = dFiles[i].FullName;
stampsImages.Images.SetKeyName(stampListSize, dFiles[i].FullName);
stampListSize++;
}
}
}
else di.Create();
for (int i = 0; i < stampsImages.Images.Count; i++)
{
ListViewItem stmp = new ListViewItem("", i);
lvwStamps.Items.Add(stmp);
}
lvwStamps.LargeImageList = stampsImages;
: リストビューを取り込み
private bool IsStampAvailable(int listIdx)
{
bool stampExists = true;
string stampFile = stampsImages.Images.Keys[listIdx];
if (!File.Exists(stampFile))
{
lvwStamps.Items.RemoveAt(listIdx);
stampsImages.Images.RemoveAt(listIdx);
stampExists = false;
}
return stampExists;
}
WinFormsまたはWebForms? – DaveShaw
いくつかのコードはおそらくあなたが思っていることの説明よりも役に立つでしょう。実際に何をしているのではなく、あなたのコードが何をしているのかだけを記述するつもりです。もしあなたがここにいないと期待していたら... –
そして、インデックスの問題。 –