トップ回答者
ListViewの結果を別のウインドウに渡すことについて

質問
回答
-
ListViewと言われてもSystem.Windows.FormsとSystem.Windows.ControlsとSystem.Web.UI.WebControlsの3つがありまして。
勝手な想像で最初のものとして答えます。
「ListViewの結果」という言葉が何を意味しているのか理解できませんでした。
ListViewは表示手段であって何らか動作をするものではありませんので結果というものは存在しませんが…。
選択結果、ListView.SelectedItemsとでも捉えればいいでしょうか?
ともかくリスト1行分を表すクラスを用意してみてはどうでしょうか。
リストの各カラムは表示の際にはstringになりますが、内部的には数値だったりenumだったりすることもありますので、元のデータを格納するという意味でもクラスは必要だと思います。
その上で、ListViewItem.Tagにそのクラスインスタンスを入れておくとのちのち便利です。
ListViewはListBoxと違ってDataSourceとか使えないんですよね。まぁListViewは複雑なので理解できますが。
- 回答としてマーク sk7474 2009年3月10日 9:26
すべての返信
-
ListViewと言われてもSystem.Windows.FormsとSystem.Windows.ControlsとSystem.Web.UI.WebControlsの3つがありまして。
勝手な想像で最初のものとして答えます。
「ListViewの結果」という言葉が何を意味しているのか理解できませんでした。
ListViewは表示手段であって何らか動作をするものではありませんので結果というものは存在しませんが…。
選択結果、ListView.SelectedItemsとでも捉えればいいでしょうか?
ともかくリスト1行分を表すクラスを用意してみてはどうでしょうか。
リストの各カラムは表示の際にはstringになりますが、内部的には数値だったりenumだったりすることもありますので、元のデータを格納するという意味でもクラスは必要だと思います。
その上で、ListViewItem.Tagにそのクラスインスタンスを入れておくとのちのち便利です。
ListViewはListBoxと違ってDataSourceとか使えないんですよね。まぁListViewは複雑なので理解できますが。
- 回答としてマーク sk7474 2009年3月10日 9:26
-
// すっごく簡単な例。 // 以下のようなレコード(名前、電話、メール)を用意し、 public class Record { private string name_; private string phone_; private string mail_; public string Name { get { return name_;} set { name_ = value; } } public string Phone { get { return phone_;} set { phone_ = value; } } public string Mail { get { return mail_;} set { mail_ = value; } } } // RecordからListViewItemを生成する拡張メソッドを用意すれば public static class RecordExtension { public static ListViewItem MakeLVItem(this Record rec) { ListViewItem item = new ListViewItem(rec.Name); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, rec.Phone)); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, rec.Mail)); item.Tag = rec; // ここで Tagに自身をセット return item; } } // Formでの"レコード追加ボタン"では private void button1_Click(object sender, EventArgs e) { Record rec = new Record(); rec.Name = textBox1.Text; rec.Phone = textBox2.Text; rec.Mail = textBox3.Text; listView1.Items.Add(rec.MakeLVItem()); // ListViewに追加 } // ListViewの行が選択されたとき private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { Record rec = e.Item.Tag as Record; // Tagから Recordを取り出して textBox1.Text = rec.Name; // TextBoxに表示する textBox2.Text = rec.Phone; textBox3.Text = rec.Mail; } }
επιστημη @わんくま同盟, Microsoft MVP Visual C++