AutoArrange=falseおよびLargeIconViewを使用して C# (VS 2008) で System Windows Forms ListView を使用しています。ユーザーがListView 内のアイテムの位置を変更できるようにし、すべての位置の変更を txt ファイルに保存します。次に、txtファイルからロードし直して、情報に問題がないことを確認しましたが、位置をListViewItemsに戻そうとしても何も変わりません。ハードコードされた値を持つ1つのアイテムだけに直接対処すると、うまくいくようです。何が起こっているのかわかりません。保存した位置を ListViewItems に戻すにはどうすればよいですか?
位置を割り当てようとしているときに ListView が確実に読み込まれるようにするために、読み込み部分をForm_Load から Form_Shown イベントに移動しましたが、この問題は解決しませんでした。listViewItem の位置は保存された位置に変わりませんが、デフォルトの位置合わせのようになります。autoarrange が false に設定されていることを確認しましたが、ここでできることは何も見つかりませんでした。多分あなたは知っていますか?たぶん、別の設定が役割を果たすのでしょうか?
これを1つのアイテムにだけ行うと、問題なく変更されますが、ロードされた値は適用されません。
listView1.Items[0].Position = new Point(300, 400);
ここで、値を ListViewItem の .Tag にロードし、POINT-Data を取得します。POINT-Data は有効であり、実際に存在することを確認しました。しかし、それはどういうわけか機能しません。アイテムはデフォルトの配置のまま配置され、位置は変わりません。
private void Form1_Shown(object sender, EventArgs e)
{
foreach (ListViewItem LVI in listView1.Items)
{
Point PNT1 = (Point)LVI.Tag;
int x = PNT1.X;
int y = PNT1.Y;
LVI.Position = new Point(x, y);
}
}
さらにテストした後の更新: ListView に約 25000 項目を追加するので、AddRange Methodを使用します。AddRange メソッドは、以前に ListViewItems のList内のすべての ListViewItems に設定された私の位置をドロップするようです。AddRange を使用すると、このアイテムは .Add-Method の位置が保持された状態で 1 ~ 2 分以内に追加されますが、.Add だけを使用することはできません。Microsoft のバグがここにあるようです。代わりに何ができますか?.Add-Method は論外です。項目を追加すると、ここでは 1 ~ 2 分ではなく 1 時間 47 分かかります。
List<ListViewItem> L1 = new List<ListViewItem>();
//...Load data from file - the data is valid loaded (checked / debugged)
ListViewItem LV1 = new ListViewItem();
LV1.Tag = P1;
LV1.Text = Text1;
LV1.ImageKey = Name1;
LV1.ToolTipText = ToolTip1;
LV1.ForeColor = ForeColor1;
LV1.BackColor = BackColor1;
LV1.Position = Position1; //here comes the problem, that seems to be lost
L1.Add(LV1);
//listView1.Items.Add(LV1); //this would work but it is to slow - AddRange required
}
listView1.Items.AddRange(L1.ToArray()); //here the position seems to get lost