• ベストアンサー

VB6でテキストボックスに入力した内容をリアルタイムにテキストファイルに書き出していく方法は?

テキストボックスに書き出した内容をテキストファイルに書き出すのに、最後に「保存」ボタンを作りまとめて行っていますが、これを、テキストボックスに内容を入力し始めたらそのままテキストファイルとして保存されるとともに、どんどん追加書き出しされるような方法はありませんか? 多分Keydownとかを使うのでは、と思うのですが、やり方が全然分かりません。どなたか教えてください!!!よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • haporun
  • ベストアンサー率40% (230/562)
回答No.2

テキストボックスに追加された文字に対する操作は、変数やファイルというものの構造上好ましくないですね。 また、BackSpaceやDeleteキーで消されたときにも対応できません。 TAGOSAKU7さまのコードのように、内容が変更されたら、テキストファイルのすべてを書きなおすという方法をとるのが理想です。 しかし、この方法では内容が長くなってきたときに、1文字1文字入力するたびに、ディスクアクセスが発生することになり、文字を打っている人にストレスを与えてしまいます。 ということで最後に文字を入力してからおよそ3秒後にファイルを保存するという方法を紹介します。 ○ フォームにテキストボックスを貼り付け、MultiLineプロパティをTrueにする。 ○ フォームにタイマーコントロールを貼り付け、Intervalプロパティを1000にして、EnabledプロパティをFalseにする。 ○ 次のコードをフォームのコードに貼り付ける。 Const TEST_FILE = "c:\test.txt" Const N_SEC = 3 Private Sub Text1_Change() Timer1.Enabled = True End Sub Private Sub Timer1_Timer() On Error Resume Next Static Cnt As Long Dim strText As String Dim lngFile As Long Cnt = Cnt + 1 If Cnt = N_SEC Then Timer1.Enabled = False Cnt = 0 Kill TEST_FILE strText = Me.Text1.Text lngFile = FreeFile Open TEST_FILE For Binary Access Write As #lngFile Put #lngFile, , strText Close #lngFile End If End Sub ------------------- ってな感じでどうでしょう。 真中ら辺はTAGOSAKU7さまのコピーです。 ちなみに Const N_SEC = 3 の3を変えれば何秒後でもできます。

fujiyama2002
質問者

お礼

なるほど。そういう方法もあるんですね。Timerっていうのは思いつきませんでした。目からうろこです。ありがとうございます!

その他の回答 (1)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

キーダウン、キープレスだと、マウス操作による変更が反応しません。 リアルタイムということなら、チェンジイベントを使用しましょう。 サンプルは、テキストボックスのMultiLineをTrueにして使用した方が、見栄えがいいかも? Private Sub Text1_Change()   Const TEST_FILE = "c:\test.txt"      Dim strText As String   Dim lngFile As Long      strText = Me.Text1.Text      lngFile = FreeFile   Open TEST_FILE For Binary Access Write As #lngFile     Put #lngFile, , strText   Close #lngFile End Sub

fujiyama2002
質問者

お礼

ありがとうございます!Text1_Changeって全然知りませんでした。なるほど、テキストを更新する度にそういうイベントが発生しているわけですね。試してみます。

関連するQ&A

専門家に質問してみよう