- PR -

ListViewからの値の取得方法について

1
投稿者投稿内容
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2005-10-12 14:24
こんにちは。VB.NETの初心者です。

以下のプログラムコードをデバッグしたところ
エラーが発生してしまう為、ListViewからの
値の取得ができずに困っています。
ちなみにCtypeにて型変換を実施しようとしましたが
使用できませんでした。
どなたか教えてください。

<開発環境>
VS2003、VB.NET

<作成中のプログラムコード>

'リストビューの詳細表示用のヘッダ作成
ListView1.View = System.Windows.Forms.View.Details
ListView1.Columns.Add("ID", 100, HorizontalAlignment.Left)
ListView1.Columns.Add("NAME", 100, HorizontalAlignment.Left)

'リストビューへItemを追加
ListView1.Items.Add("1", 0)
ListView1.Items(0).SubItems.Add("トマト")
ListView1.Items.Add("2", 1)
ListView1.Items(1).SubItems.Add("みかん")

'リストビューのItemを取得
Dim lvwData(2) As Integer
ListView1.Items.CopyTo(lvwData, 0) ★Ctypeも使用できない
For i As Integer = 0 To lvwData.Length - 1
Console.WriteLine(lvwData(i))
Next

<エラー内容>
'System.InvalidCastException' のハンドルされていない例外が
mscorlib.dll で発生しました。

追加情報 : オブジェクトをこの型の配列に格納できません。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-12 14:39
引用:

taaさんの書き込み (2005-10-12 14:24) より:

エラーが発生してしまう為、ListViewからの
値の取得ができずに困っています。
ちなみにCtypeにて型変換を実施しようとしましたが
使用できませんでした。


そりゃ、ListViewItem からいきなり int にキャストなんてできないですよね。

コード:

    Dim iArray As Integer() = New Integer(Me.ListView1.Items.Count - 1) {}

    For i As Integer = 0 To Me.ListView1.Items.Count - 1
        iArray(i) = Integer.Parse(Me.ListView1.Items(i).Text)
    Next i

    For Each i As Integer In iArray
        MessageBox.Show(i.ToString())
    Next i


直書きなのでテストしていませんが、こういう感じではないでしょうか?
Integer.Parse の例外対策はしてくださいね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2005-10-12 15:13
解決しました。
じゃんぬねっとさん返信ありがとうございます。
記載して頂いたコードを使用してListViewからの値を
取得する事ができました。

引用:

じゃんぬねっとさんの書き込み (2005-10-12 14:39) より:
そりゃ、ListViewItem からいきなり int にキャストなんてできないですよね。


うーん。その辺のListViewItemやArrayやらで返却されるCopyto等の
使い方がよくわからないんですよねー。
今回ケースでは、CopyToを使用して配列に格納できればコードがすっきり
するので習得したいのですが・・・。

コード:

    Dim iArray As Integer() = New Integer(Me.ListView1.Items.Count - 1) {}

    For i As Integer = 0 To Me.ListView1.Items.Count - 1
        iArray(i) = Integer.Parse(Me.ListView1.Items(i).Text)
    ★CopyToに気持ちが行っていて、Item.Textで取得できることを忘れていました。
    Next i

    For Each i As Integer In iArray
        MessageBox.Show(i.ToString())
    Next i


引用:

直書きなのでテストしていませんが、こういう感じではないでしょうか?
Integer.Parse の例外対策はしてくださいね。


正常に動作しました。例外対策のアドバイスまで
わざわざ、ありがとうございます。



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-12 15:33
こんにちは、じゃんぬ です。

引用:

taaさんの書き込み (2005-10-12 15:13) より:

うーん。その辺のListViewItemやArrayやらで返却されるCopyto等の使い方がよくわからないんですよねー。


第 1 引数に渡される値の型のことですよね?
そういう場合は、とりあえず Object 型を使用して取得してみると、
実際に何がコピーされているのかがわかります。
正解は、ListViewItem[] です。

引用:

今回ケースでは、CopyToを使用して配列に格納できればコードがすっきり
するので習得したいのですが・・・。


はい、了解です。

コード:

    Dim hItems As ListViewItem() = New ListViewItem(Me.ListView1.Items.Count - 1) {}

    Me.ListView1.Items.CopyTo(hItems, 0)

    For Each hItem As ListViewItem In hItems
        MessageBox.Show(hItem.Text)
    Next hItem


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
taa
常連さん
会議室デビュー日: 2005/08/29
投稿数: 44
投稿日時: 2005-10-13 11:18
引用:

じゃんぬねっとさんの書き込み (2005-10-12 15:33) より:
こんにちは、じゃんぬ です。

引用:

taaさんの書き込み (2005-10-12 15:13) より:

うーん。その辺のListViewItemやArrayやらで返却されるCopyto等の使い方がよくわからないんですよねー。


第 1 引数に渡される値の型のことですよね?
そういう場合は、とりあえず Object 型を使用して取得してみると、
実際に何がコピーされているのかがわかります。
正解は、ListViewItem[] です。

引用:

今回ケースでは、CopyToを使用して配列に格納できればコードがすっきり
するので習得したいのですが・・・。


はい、了解です。

コード:

    Dim hItems As ListViewItem() = New ListViewItem(Me.ListView1.Items.Count - 1) {}

    Me.ListView1.Items.CopyTo(hItems, 0)

    For Each hItem As ListViewItem In hItems
        MessageBox.Show(hItem.Text)
    Next hItem





じゃんぬねっとさん。
お礼が遅くなってしまい申し訳ありません。
正常に動作しました。ありがとうございます。
正直、いまいちピンとは来ないのですが
もう少し、いろいろなクラスの使い方(コツ)
を学んでいこうと思います。


1

スキルアップ/キャリアアップ(JOB@IT)