アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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を変えれば何秒後でもできます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/22 21:01

キーダウン、キープレスだと、マウス操作による変更が反応しません。


リアルタイムということなら、チェンジイベントを使用しましょう。

サンプルは、テキストボックスの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
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/01/22 21:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!