- - PR -
[C#]ListViewItemCollectionを使ったlistViewアイテムの格納と取り出し
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-09 18:49
ListViewItemCollectionにlistViewのアイテムを格納したのですが、取り出すことができなくて困っています。
プログラムの概要は //定義 ListView.ListViewItemCollection[] itemS=new ListView.ListViewItemCollection[3]; //格納 itemS[0]=listView1.Items; itemS[1]=listView2.Items; //消去 listView1.Items.Clear(); listView2.Items.Clear(); //取り出し listView1.Items.AddRange(itemS[0]); listView2.Items.AddRange(itemS[1]); としており、これで元のlistView1、listView2に戻そうとしているのですが、どうしても「取り出し」の部分でエラーが発生してしまいます。 どのようにすれば、一度消したlistViewのアイテムを格納・取り出しできるのでしょうか? | ||||||||
|
投稿日時: 2006-02-09 18:54
MSDN ライブラリの「値型と参照型」の項をよくお読みになることをお勧めします。
2-3 値型と参照型 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-02-09 22:26
「じゃんぬねっと」さん、「値型と参照型」の事項を読みました!勉強不足なもんで、こんな風になっていたとは知りませんでした。
しかしどうしても、この項と「ListViewItemCollectionの格納・取り出し」について、はっきりとした問題点を掴めないでいるのですが、 格納プログラム(itemS[0]=listView1.Items;)を見ると、 どちらも参照型であり、この地点で間違いが発生しているということなのでしょうか? | ||||||||
|
投稿日時: 2006-02-10 00:18
変数を入れ物とし、値をりんごとします。 値型は、りんごがコピーされ入れ物に入ります。 A=空っぽ B=りんご A=B これで両方にりんごがあることになり、かつそれぞれ別のりんごです。 対して参照型はポインタですから A=空っぽ B=りんごのある場所 A=B これで両方に「りんごのある場所」が入ります。 ここでりんごはひとつしかありません。 Items.ClearのItemsはりんごのある場所で、Clearはそこにあるりんごを消去しなさいということになります。 | ||||||||
|
投稿日時: 2006-02-10 01:06
とあるのに、
うーん。(~_~;) 結論的には、同じ入れ物の中身を消しているということになります。 A と B という変数があり、A も B も同じアドレス C を 参照 しています。 A を通じて Clear すれば、参照先である C が当然クリアされます。 A も B も同じものを参照しているので、B から参照しても、C は C なので、 既に A からクリアされた C を見ていることになります。 C/C++ などで、ポインタとか参照とかをやると概念はわかるんでしょうが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-02-12 09:35
そうです。itemS[0] は、listView1.Items と同じになっています。これはコピーが作られるのではなく、itemS[0] という別の参照方法を定義した、ということです。 その上で listView1.Items.Clear とすると、itemS[0].Clear としていることと同じことをしています。 単純には、itemS[0] を別のインスタンスにして、ListViewItem を参照させます。 itemS[0].AddRange(listView1.Items); 〆 written by Jitta on 2006/02/12 |
1