- 締切済み
Rich TextBox の使い方で教えて下さい。
VB6で、RichTextBoxを配置しているフォームがあります。 別のマシンと通信して、受け取ったデータ(1データ、500バイト程)をRichTextBoxに次々表示(下に下に)して行きます。 ある容量(文字数)を超えたら、RichTextBoxの古い情報から消えて新しい情報は下に表示し続ける・・・ この様な場合、どうコーディングすればよいのでしょうか? ご存じの方おられましたらご教授下さい。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BellBell
- ベストアンサー率54% (327/598)
保持するデータを『ある文字数を超えた場合削除する』ということでしたが、そこをあえて、『ある行数を超えた場合削除する』と変更した場合、下記のようにデータを保持する配列を利用したコード例が考えられます。 ちなみに、下記の例では過去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 ここまで********************** 上記コードのままでは、下記のような欠点が考えられます 動作速度が遅い 画面がちらつく 画面サイズに収まらない場合、最新のデータ(一番下の行)がスクロールしないと表示されていない
1、アペンドするデータのバイト数を調べる。 2、テキスト長限度を越えるか判断する。 3、仮に越えるならば、冒頭から改行までのバイト数を調べる。 4、OKの改行の数を確定する。 5、データを再作成し表示する。 こんな感じでいいのでは?