- PR -

リストビューの項目取得、書込みの方法を御教授願います

投稿者投稿内容
くまさん
会議室デビュー日: 2006/05/04
投稿数: 9
投稿日時: 2006-05-04 22:36
はじめまして、NET系のプログラムを最近始めたばかりのものです
リストビューの項目内容を全て取得しfor eachでファイルに書込みたいのですが
C#のケースは下記の様に稀にあるのですがC++のケースは皆無なので
皆様のお世話になりたいと思いますよろしくお願いいたします。

C#ではこれでOKだそうです foreach(ListViewItem itm in listView.Items)

C++の場合どのように書いたらいいでしょうか。
御教授お願いします。
環境はWindows 2000 SP4 Visual Studio 2005 VC8です



[ メッセージ編集済み 編集者: くまさん 編集日時 2006-05-04 22:44 ]
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-05-04 22:44
VC2005の場合
コード:


for each ( ListViewItem^ itm in listView->Items )
{
/*
itm->Text で一番左のテキストが
itm->SubItems[ i ]->Text で左から2番目から順にテキストが取得できます。
*/
}



[ メッセージ編集済み 編集者: Blue 編集日時 2006-05-04 22:59 ]
くまさん
会議室デビュー日: 2006/05/04
投稿数: 9
投稿日時: 2006-05-04 22:56
Blueさんはじめましてよろしくお願い致します

for each ( ListViewItem^ itm in listView->Items )

このようなエラーが出るのですが。

: error C2819: クラス 'System::Windows::Forms::ListView' にはオーバーロードされたメンバ 'operator ->' がありません。

c:\winnt\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : 'System::Windows::Forms::ListView' の宣言を確認してください。
代わりに '.' を使用しますか?

: error C2232: '->System::Windows::Forms::ListView::Items' : 左のオペランドが 'class' 型です。'.' を使用してください。

: fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-05-04 23:01
listViewはそのFormのメンバ変数名ですよ?

デフォルトならば

this->listView1(または listView1 だけでもOK)

ですよ。
# this-> をつけるかつけないかは好みですので。

[ メッセージ編集済み 編集者: Blue 編集日時 2006-05-04 23:23 ]
sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2006-05-04 23:13
こんばんは。

引用:

: error C2819: クラス 'System::Windows::Forms::ListView' にはオーバーロードされたメンバ 'operator ->' がありません。

c:winntmicrosoft.netframeworkv2.0.50727system.windows.forms.dll : 'System::Windows::Forms::ListView' の宣言を確認してください。
代わりに '.' を使用しますか?



ひょっとしてですが、スタック上にオブジェクトを構築したり、
クラスのメンバオブジェクトとして、作成してしませんか?
(要するに、handle(^)オブジェクトではなく。)

デザイナを使って、フツーにコントロールを貼り付けた場合には、
Blueさんが言及されているコードで問題ないはずですが。
くまさん
会議室デビュー日: 2006/05/04
投稿数: 9
投稿日時: 2006-05-04 23:42
Blueさんありがとうございます
siaさん、お世話になりますBlueさんのご指摘通りでした
listView1に置換えたらエラーは出ませんでした、下記の様にファイルを書込む準備を
したのですが、肝心な部分の書き方が分からないのですが、御教授お願いしても
宜しいでしょうか。
コード:

using ::System::Windows::Forms::DialogResult;
SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog();
saveFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" ;
saveFileDialog1->FilterIndex = 2 ;
saveFileDialog1->RestoreDirectory = true ;

if(saveFileDialog1->ShowDialog() == DialogResult::oK)
{
for each ( ListViewItem^ itm in listView1->Items )
{
/*
itm->Text で一番左のテキストが
itm->SubItems[ i ]->Text で左から2番目から順にテキストが取得できます。
*/
}
}
}






[ メッセージ編集済み 編集者: くまさん 編集日時 2006-05-05 00:11 ]

[ メッセージ編集済み 編集者: くまさん 編集日時 2006-05-05 00:11 ]
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-05-04 23:50
とりあえず、for each の中で IO::BinaryReader を new しても連続して書き込めません。
外で宣言+newしてください。
それと、テキスト(文字列)なのにバイナリで出力するのでしょうか?
ファイルに出力する場合、文字コードはなんになるのか?
明確にしてください。

引用:
TABが使えないんですね、読みにくくてすみません


BBコードをつかえばキレイに表示できます。

[ メッセージ編集済み 編集者: Blue 編集日時 2006-05-04 23:54 ]
くまさん
会議室デビュー日: 2006/05/04
投稿数: 9
投稿日時: 2006-05-04 23:53
失礼しました、バイナリデータではありません、S-JISのテキストで出力したいのですが。

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