• 締切済み

Rich TextBox の使い方で教えて下さい。

VB6で、RichTextBoxを配置しているフォームがあります。 別のマシンと通信して、受け取ったデータ(1データ、500バイト程)をRichTextBoxに次々表示(下に下に)して行きます。 ある容量(文字数)を超えたら、RichTextBoxの古い情報から消えて新しい情報は下に表示し続ける・・・ この様な場合、どうコーディングすればよいのでしょうか? ご存じの方おられましたらご教授下さい。

  • yaeba
  • お礼率23% (6/26)

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

保持するデータを『ある文字数を超えた場合削除する』ということでしたが、そこをあえて、『ある行数を超えた場合削除する』と変更した場合、下記のようにデータを保持する配列を利用したコード例が考えられます。 ちなみに、下記の例では過去50行(+最新1行)です。 また、なぜある行数と変更して考えたかと言うと、作りが非常に簡単になるということ(バグの混入が少なくなる)、また、質問の言葉からデータは各データ毎に文字列長さが異なると思いましたが、その場合『ある文字数』を超えた場合削除されます、と言うよりも、『ある行数』を超えた場合のデータは削除されます、の方がユーザにとって理解しやすい(下の例では過去50の取得データが保持されているとわかる)、と考えたためです。 現在、VB6開発環境が手元に存在しないため、机上コーディングのみですので、アホなスペルミス等でそのままのコピー&ペーストでは動かない可能性もあります。 以下コード************** '取得データの保持数 Dim DataCount As Long '取得文字列データを保持する配列 Dim Data(50) As String Private Sub AddData(ByRef NewData As String)   Dim i As Long   If DataCount <= 50 Then     Data(DataCount) = NewData     '※上で判定しているため、DataCountは最大で51までしか増加しない     DataCount = DataCount + 1   Else     '最大行数を超えたため、過去の一番古いデータを削除する     For i = 0 To (50 - 1)       Data(i) = Data(i + 1)     Next     Data(50) = NewData   End If   '表示対象のリッチテキストボックスの内容をクリア   RichTextBox1.Text = vbNullString   'すべてのデータをリッチテキストボックスに追加する   For i = 0 To DataCount - 1     RichTextBox1.Text = RichTextBox1.Text & Data(i) & vbCrLf   Next End Sub ここまで********************** 上記コードのままでは、下記のような欠点が考えられます 動作速度が遅い 画面がちらつく 画面サイズに収まらない場合、最新のデータ(一番下の行)がスクロールしないと表示されていない

noname#22222
noname#22222
回答No.1

1、アペンドするデータのバイト数を調べる。 2、テキスト長限度を越えるか判断する。 3、仮に越えるならば、冒頭から改行までのバイト数を調べる。 4、OKの改行の数を確定する。 5、データを再作成し表示する。 こんな感じでいいのでは?

関連するQ&A

  • TextBox内で違う色の文字を表示したい

    最近Visual Basicをはじめました。最新?のVB2008EEをダウンロードして色々頑張っています。 テキストボックスに文字を表示する時、 例えば あいうえお(黒)さしすせそ(赤)とか違う色で続けて表示する方法はありますか? 例) RichTextBox1.Text = RichTextBox1.Text + (str & ht & vbCrLf) ↑のhtの部分だけ赤とか。 VBは素人なので質問内容が不鮮明かもしれませんがご理解の上、宜しくお願いします。

  • RichTextBoxに代入されたTextBoxの数を表示

    VB2008を使用しています。現在、10個のTextBoxとそれに対応するCheckBoxを作成し、チェックの入ったTextBox内の文字をRichTextBoxに代入するプログラムを作成しています。そこでRichTextBoxに代入されたTextBoxの数を別のTextBoxに表示させたいのですが何か良い方法はありますでしょうか?現在、下記のようにコードを組んであります。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click RichTextBox1.Clear() If Me.CheckBox1.Checked = True Then RichTextBox1.Text = TextBox1.Text If Me.CheckBox2.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox2.Text ・ ・ ・ If Me.CheckBox10.Checked = True Then If RichTextBox1.Text <> "" Then RichTextBox1.Text = RichTextBox1.Text & "・" End If RichTextBox1.Text = RichTextBox1.Text & TextBox10.Text End If

  • VB2005のTextBoxでカンマ区切りの表示

    よろしくお願いします。開発環境はVB2005です。 フォーム上に配置したTextBoxに金額を入れるのですが、わかりやすく読めるようにユーザーが数字を入力したら自動的に3桁のカンマ区切りで表示したいのですが、どのような方法があるのか教えてください。

  • VB.NETからエクセルを起動して、エクセルでVBを閉じたい。

    こんにちは。 先日、エクセルのフォームを最前面に配置したいという 質問をさせて頂いたものでございます。 それで、SetWindowPosのAPIで設定する方法を教えて頂いたのですが、 最前面にする事は出来たのですが、フォームを動かすと ブックはその一つ下に現れてしまい、 ブックを最背面に配置するなどを試みてみたのですが、 どうもうまく行かないので、 エクセルから直に立ち上げることが出来ないようにして VB.NETのフォームを作ってエクセルにデータを送ろうかと思いました。 それで、データを送る方法は何とかなりそうなのですが、 VB.NETのフォームからエクセルを起動して、 次にエクセルからそのフォームを出したり、隠したりしたいのですが、 その場合、VB.NETのフォームのなんと言うハンドルを取得すればよいでしょうか? IDにも色々あるようで、どれを使えばよいのか分からなくなってしまいました。 そのIDはVBのフォームを起動した時に、エクセルと共有するiniファイルなどに、書き込んでおこうかと思っています。 よろしくお願いいたします。m(__)m

  • Accessのフォームからダイアログを表示する方法

    いつもお世話になっております。 Access2003、VB6の環境でコーディングしています。 Accessのフォームでボタンが押されたら、 データ入力用のダイアログが表示されるようにしたい のですが、そのダイアログを表示させる方法が わかりません。 どうか、よろしくお願いいたします。

  • RichTextBox使用できない

    RichTextBoxを使いたいのですが、参照設定できません。 「プロジェクト-コンポーネント」メニューのコントロールでチェックを入れOKを押すと 「この名前は既にあるモジュール、プロジェクト、オブジェクトライブラリで使われています。」 というエラーが出ます。 通常のインストールで入っているのでしょうか? ツールボックスにはありませんので、フォームには配置はできません。 環境は、VB6.0+Windows2000です。

  • バイナリーデータを16進数に表示したい

    バッファーにパックされたデータが入ってきます。 そのデータを1バイトずつHEXで表示したいのですが VB.NETでプログラミングしているのですが苦戦しています。 H01,H10,H20...等はしたコーディングで表示できるのですが HC5,HCA,E0等の上位4ビットが大きいと全て3Fとなって期待した表示ができません。 メモリーダンプして1バイト毎に16進数(0~F)で表示したいのと同様で、1バイトを変換しないでそのままHEX表示したいです。 下はうまく動かないサンプルです。開発言語はVB.NETです。 ------------------------------------ InBuffer = _Rfid.ReadExisting() hexData = "" For i = 0 To Len(InBuffer) - 1 hexData = hexData & Hex(Asc(Mid(inData, i + 1, 1))).PadLeft(2, "0"c) Next ----------------------------- どなたか方法をご教示ください。 宜しくお願いします。

  • VBとかC#とかC++とか

    Visual Studio2010でシステムを作るのですが、 VBやC#やC++などありますが、どれがどのようなのに向いているのですか? VBは簡易ですが、処理などは遅いのでしょうか? フォームをつくってデータベースとデータのやりとり(文字情報のみ)を するシステムはどの言語が向いてますか? 一度に使用する人数は数十人いて、レスポンス重視です。 教えてください、お願いします。

  • VBAでのユーザーフォームの使い方

    VBAのマクロでユーザフォームにボタンを配して、それによってエクセルシートのデータを更新するようなマクロを作りたいのですが、ユーザフォームの挿入でボタン配置まではできるのですけど、どのようにリンク付けするのかコーディング等、解りません。お教え下さい。簡単なサンプルコーディングがあれば助かります。

  • アクセス+vb 複数コントロールに同じ処理する場合

    アクセス+VBです。 空のフォームにラベルを複数ランダムに配置します。(多ければ500個くらい) そのラベルにクリックイベントを発生させて処理させる場合、ラベルの数だけイベント処理を書かなくてはいけませんよね。 もし、処理内容が同じならひとつの処理記述ですませる方法はないですか。 例えば学校の教室だとすれば、ラベルを机の代わりにしてフォームに配置します。 ラベル(机)をクリックしたら、その生徒のデータが表示される。 良い方法はないでしょうか?