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