ListViewの内容をコレクション等へ出力して取り出したい。
投稿者 パールマン  (社会人)
投稿日時
2011/2/19 00:59:28
ListViewにて選択されたItemが、と或るボタンをクリックすることにより複数行記述できるテキストボックスに、aタグ付きで出力される。
という動作でよいでしょうか。
ご質問の本文では、選択されたItemなのか全てのItemなのかが読み取れなかったのですが、‘選択されたItem’という仕様であれば間違いなかろうと解釈します。
取り出すだけでありましたら、
取り出された、SubItem0,SubItem1にタグ文字列を追加してMultiLineプロパティをTrueにしたテキストボックスに入れればよいかと考えます。
最後以外は改行コード(VbCrLf)を付けると・・・・
いかがでしょう
という動作でよいでしょうか。
ご質問の本文では、選択されたItemなのか全てのItemなのかが読み取れなかったのですが、‘選択されたItem’という仕様であれば間違いなかろうと解釈します。
取り出すだけでありましたら、
For Each k As ListViewItem In ListView1.Items
Dim SubItem0 As String = k.SubItems(0).Text ' タイトル
Dim SubItem1 As String = k.SubItems(1).Text ' URL
Next
取り出された、SubItem0,SubItem1にタグ文字列を追加してMultiLineプロパティをTrueにしたテキストボックスに入れればよいかと考えます。
最後以外は改行コード(VbCrLf)を付けると・・・・
いかがでしょう
投稿者 ビーグル犬  (社会人)
投稿日時
2011/2/19 21:42:59
パールマンさんありがとうございます。
ただパールマンさんの変数宣言だとスコープがFor Each~Nextのみになってしまうので上位宣言しました
ただパールマンさんの変数宣言だとスコープがFor Each~Nextのみになってしまうので上位宣言しました
投稿者 ビーグル犬  (社会人)
投稿日時
2011/2/19 21:44:57
すみません。
全てを取得したいのです。
選択したものだけでなく。
全てを取得したいのです。
選択したものだけでなく。
投稿者 YuO  (社会人)
投稿日時
2011/2/20 01:41:16
ListView.Itemsなら全ての要素が,SelectedItemsなら選択された要素が得られます。
MSDN: ListView.Items プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.listview.items.aspx
MSDN: ListView.SelectedItems プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.listview.selecteditems.aspx
で,これらをFor EachでまわせばListViewItemが列挙されます。
というか,パールマンさんのコードをブレークポイントを置いてデバッグ実行してウォッチすれば確認できると思いますが……。
他の方法としては,LINQ + String.Joinでしょうか。
とか。ではString.JoinにIEnumerable(Of String)を受け付けるものがないので,
と,ToArrayをかます必要がありますが……。
MSDN: ListView.Items プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.listview.items.aspx
MSDN: ListView.SelectedItems プロパティ (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.listview.selecteditems.aspx
で,これらをFor EachでまわせばListViewItemが列挙されます。
というか,パールマンさんのコードをブレークポイントを置いてデバッグ実行してウォッチすれば確認できると思いますが……。
他の方法としては,LINQ + String.Joinでしょうか。
TextBox1.Text = String.Join(vbNewLine,
ListView1.Items.Cast(Of ListViewItem)().Select(Function(item) String.Format("<a href = ""{1}"">{0}</a>", item.SubItems(0).Text, item.SubItems(1).Text)))
とか。ではString.JoinにIEnumerable(Of String)を受け付けるものがないので,
TextBox1.Text = String.Join(vbNewLine, _
ListView1.Items.Cast(Of ListViewItem)().Select(Function(item) String.Format("<a href = ""{1}"">{0}</a>", item.SubItems(0).Text, item.SubItems(1).Text)).ToArray())
と,ToArrayをかます必要がありますが……。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2011/2/20 10:21:08
> <a href = "http://google.com/">Google</a>
> <a href = "http://yahoo.com.jp">Yahoo</a>
ひとつ質問。
データ中に「"」や「&」や「<」などが現れた場合、それらはどう表記したいですか?
出力結果を HTML や XML の形式で表記したいのであれば、たとえば
もしもそうしたエスケープが必要な場合、XElement 等を使う事ができます。
ただしこの手法では、
> <a href = "http://yahoo.com.jp">Yahoo</a>
ひとつ質問。
データ中に「"」や「&」や「<」などが現れた場合、それらはどう表記したいですか?
出力結果を HTML や XML の形式で表記したいのであれば、たとえば
K&R | http://www.amazon.co.jp/o/ISBN=406155753X
というデータの場合、これは単純に <a href="http://www.amazon.co.jp/o/ISBN=406155753X">K&R</a>
とするのではなく、実体参照を用いた <a href="http://www.amazon.co.jp/o/ISBN=406155753X">K&R</a>
という表記にすることが求められますが、今回もその必要がありますか?もしもそうしたエスケープが必要な場合、XElement 等を使う事ができます。
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim X = From lv In ListView1.Items.OfType(Of ListViewItem)() _
Let Y = <a href=<%= lv.SubItems(1).Text %>><%= lv.SubItems(0).Text %></a> _
Let Z = Y.ToString() Select Z
TextBox1.Lines = X.ToArray()
End Sub
ただしこの手法では、
<a href = "http://google.com/">Google</a>
ではなく、 <a href="http://google.com/">Google</a>
という出力結果になりますのでご注意を。
タイトル | URL
Google | http://google.com/
Yahoo | http://yahoo.co.jp/
のようになっているとします。
ボタンを押したときにテキストボックスに
<a href = "http://google.com/">Google</a>
<a href = "http://yahoo.com.jp">Yahoo</a>
のように出力するようにしたいです。
コレクションに入れてFor Eachして取り出してどうたらこうたらすればできそうですがわかりません。
ご教授お願いします