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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qリストボックスの内容をテキストボックスに表示する。

タイトルどおりなんですが、リストボックスの内容をテキストボックスに表示することが出来ません。
といっても、普通に表示することは出来たのですが、
今やっていることは、テキストボックスの中にある文章を表示しておいてカーソルがある部分にリストボックスの内容を表示する。。というものです。

(例)
テキストボックスの中身が
「おはようございます。今日の天気はです。」
リストボックスの中身が
晴れ・曇り・雨
このとき「~天気は(ここにカーソルがある)です」
あるボタンを押すことで(ダブルクリックでもどちらでも良い)
テキストボックスの内容が
「~天気は晴れ(リストボックスで選択したアイテム)です。」

と表示できるようにしたいのです。どうしても文末にしか表示することが出来ませんでした。長文で分かりづらい点が多々あると思いますが、
良い方法があれば教えてください。

Aベストアンサー

カーソルの位置は、テキストボックスのSelStartプロパティで取得することができますので、その値を元に、LeftやMid関数で文字を切り貼りしてください。

Qリッチテキストボックスとテキストボックスの違い

VB6のリッチテキストボックスとテキストボックス
の違いは何なんでしょうか?

Aベストアンサー

RichTextだと扱えるファイルサイズが大きくなり
プロパティの指定が可能になります。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsrichtextboxclasstopic.asp

Qリストボックスの全ての内容をテキストボックスに表示するには?

VB2005初心者です。
ボタン1を押した時にリストボックス1の全ての内容をテキストボックス1に表示さるにはどのようにすればいいのでしょうか?
ネットで調べているのですが見つかりません・・。
どうぞよろしくお願いします。

Aベストアンサー

リストボックスの項目は Itemsプロパティで参照可能ですよ

データの取得イベントで
dim sb as new System.Text.StringBuilder
for n as integr = 0 to ListBox1.Items
  sb.append( ListBox1.Items(n).toString)
  sb.Append( vbcrlf )
next
TextBox1.Multiline = true
TextBox1.ScrollBars =ScrollBars.Vertical
TextBox1.Text = sb.toString
といった具合です

Qテキストボックスの内容(複数行)をリストへ

テキストボックスの内容(複数行)をリストボックスへ1行表示にするにはどうすれば良いのでしょうか?
replaceにてvbcrlf(改行文字?)を置き換えしようとしても無理でした。

ご教授お願いします。

Aベストアンサー

TextBox1はMultiLineをTrueにしました。
List1を貼りつけました。
ボタンを1つ貼りつけました。
Private Sub Command1_Click()
s = Text1.Text
s1 = Replace(s, vbCrLf, "")
MsgBox s1
List1.AddItem s1
End Sub

テキストボックスでエンタキーで改行する方法で
例えば4行を入力し、ボタンをクリックすると、リストボックスには、1行の表示になりましたが。
そうならなかったのはなぜでしょうね。

Qテキストボックスの内容をOutlook Expressの新規作成に貼り付ける方法は?

テキストボックスに入力されたデータをコマンドボタンクリック一発でOutlook Expressの新規作成メールの本文部分にコピーする方法はありますか?また、入力した宛先アドレスを同じようにOutlook Expressの新規メールの宛先部分に貼り付ける方法もあるのでしょうか?教えてください!!!

Aベストアンサー

>Outlook Expressの新規作成メールの本文部分
Outlook Express限定とするわけではないですが・・・

各ユーザー毎に使用するメーラーは違うはずです。
サンプルはそれぞれの環境で、標準で使用するメーラーを
※メルアド
※タイトル
※本文
を入力された状態で起動します。

標準で使用するメーラーは、
[インターネットのプロパティ]→[プログラム]→[電子メール]項目にて設定します。
この項目はレジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto\shell\open\command
に登録されています。
どうしても「Outlook Express限定」とするのであれば、ここの情報をPGで変更してあげる必要があります。
レジストリ操作については参考URLを見てください。

Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Const SW_SHOWNORMAL = 1

Private Sub Command1_Click()
  Dim lngSts As Long
  
  lngSts = ShellExecute(Me.hwnd, "open", _
           "mailto:****@hoge.com?subject=(゜ .゜)ノ ヤホ&body=(-ロ-; グハッ", _
           vbNullChar, vbNullChar, SW_SHOWNORMAL)
End Sub

参考URL:http://www.vbvbvb.com/jp/gtips/index0251.html

>Outlook Expressの新規作成メールの本文部分
Outlook Express限定とするわけではないですが・・・

各ユーザー毎に使用するメーラーは違うはずです。
サンプルはそれぞれの環境で、標準で使用するメーラーを
※メルアド
※タイトル
※本文
を入力された状態で起動します。

標準で使用するメーラーは、
[インターネットのプロパティ]→[プログラム]→[電子メール]項目にて設定します。
この項目はレジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto\shell\open\command
に登録されています。
ど...続きを読む


人気Q&Aランキング

おすすめ情報