リストボックスの内容をセーブ、ロードするには?

解決


ソウソウ  2003-10-16 07:24:18  No: 109166

リストボックスの内容をセーブし、ロード出来るようにしたいのですが、
過去ログなどを拝見させて頂いたりしながら、
以下のプログラムを書いてみたところ、
ロードしたときにリストボックスの一番上のアイテムが、
「・」という文字に変わってしまいました。例えば、
「りんご、みかん、オレンジ」という3項目がリストボックスにあるばあい、
それをセーブして、ロードすると、
「・、みかん、オレンジ」という具合になってしまいます。
これはどのようにすれば解決できるでしょうか?
どなたかご教示ください。
’セーブ
Dim itemindex As Long
Dim strData() As String * 20
ReDim strData(List1.ListCount - 1)
Dim listall As Integer

listall = List1.ListCount - 1
Open "sample1.dat" For Binary Access Write As #1
    For itemindex = 0 To listall
        strData(itemindex) = List1.List(itemindex)
        Put #1, , strData(itemindex)
    Next itemindex
    Put #1, , listall
Close #1

’ロード
Dim listall As Integer
Open "sample1.dat" For Binary Access Read As #1
    Get #1, , listall
Close #1

Dim itemindex As Long
Dim strData() As String * 20
ReDim strData(listall)

Open "sample1.dat" For Binary Access Read As #1
    For itemindex = 0 To listall
        Get #1, , strData(itemindex)
        List1.AddItem strData(itemindex)
    Next itemindex
Close #1


minami  2003-10-16 09:28:11  No: 109167

単にコーディングミスかなあという気がしたのですが、、
まずセーブで、
listall = List1.ListCount - 1
Open "sample1.dat" For Binary Access Write As #1
Put #1, , listall    ’この1行がいりますよね??
For itemindex = 0 To listall
(以下省略)

ロードでは一度ファイルを閉じて、再度オープンしているので
また、1行目(つまりlistallの値)から読み直しているのが原因だと思います。

Dim listall As Integer
Open "sample1.dat" For Binary Access Read As #1
    Get #1, , listall
Close #1  ’ここでファイルを閉じない!

Dim itemindex As Long
Dim strData() As String * 20
ReDim strData(listall)

Open "sample1.dat" For Binary Access Read As #1
’↑すでにオープンしているのでこのオープンは不要!!
(以下省略)


ソウソウ  2003-10-18 21:45:49  No: 109168

お答えいただきまして、ありがとうございました!
ファイルを閉じないのが秘訣なんですね。
コーディングミスは何度見ても気が付きませんでした。
まだまだ、勉強不足でした。
ご指摘の通りにしてみたところ、できました。
どうもありがとうございましたm(__)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加