- PR -

RichTextBoxの行削除のしかた

投稿者投稿内容
みこ
会議室デビュー日: 2005/09/21
投稿数: 3
投稿日時: 2005-09-21 16:42
はじめまして、VB.NETで開発しています。

通信結果ログをRichTextBoxにAppendしていく方法で表示しているのですが、
ある程度の行まで行くと、止まってしまいます。
たぶんMax行もしくは、Max文字数に達してしまったからだと思うのですが、
たとえば、1000行になったかどうかを書くたびにチェックし
1000行を超えたら、上から10行を削除すると言う方法をとりたいのですが、
今までVBでのプログラムは経験あるのですが、.NETもRichTextBoxも
初めて使うので、分からないんです。
どうかご教授お願い致します。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2005-09-21 16:57
今日は

一行消すので有れば下記のようにすれば消えると思います。
Dim l as integer=行
RichText.Lines[l].Remove(0,logtext.Lines[l].Length)
又、複数行を同時に削除の時は、削除数を複数行分にすれば出来るかも、
試していませんが。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-21 17:11
お世話になります。

こんな感じでしょうか。
コード:
Dim lines As String() = Me.RichTextBox1.Lines
Dim len As Integer = lines.Length

If len > 10 Then
  Me.RichTextBox1.Text = ""
  For i As Integer = 10 To len - 1
    Me.RichTextBox1.AppendText(lines(i) + ControlChars.NewLine)
  Next
End If


Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-09-21 17:24
あるいは、行番号から文字インデックスを取得してSelectし、SelectedTextを空文字列にするとか。
問題は、行番号から文字インデックスを取得する手段が、.NET 1.0/1.1ではSendMessage(EM_LINEINDEX)に頼るしかない点ですが。
syar
会議室デビュー日: 2005/07/08
投稿数: 2
投稿日時: 2005-09-21 22:10
しょっぽい方法
private void RemoveLine(RichTextBox rt, int maxlength)
{
if (rt.Lines.Length > 10)
{
rt.Select(0, rt.Lines[0].Length + 1);
rt.SelectedText = string.Empty;
}
}
みこ
会議室デビュー日: 2005/09/21
投稿数: 3
投稿日時: 2005-09-22 16:03
お世話になります。お返事ありがとうございました。

'10行削除
RichTextBox1.Lines(10).Remove(0, RichTextBox1.Lines(10).Length)
↑残念ながら、何も変わりませんでした。

1つのログの長さが数行にわたるため、1000行以上を判定して
ループで再描画すると時間がかかって実装不可能です。

Mid$等で上書きする方法もやってみましたが、やはり動きがにぶく
また、追加行にフォーカスを合わせたいのですが、この方法で上書きすると
一番上にカーソルが移動してしまいます。

こうなると最悪1000行になったらクリアするという方法しかないのですが、
これは本来やりたい事とはかなり違ってきます。
リッチテキストボックスがMAXを超え、書けないと言う判断とかは出来るんでしょうか。

もう納期がせまっていて本当に困っています。
宜しくお願い致します。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-22 16:40
お世話になります。

引用:

みこさんの書き込み (2005-09-22 16:03) より:
リッチテキストボックスがMAXを超え、書けないと言う判断とかは出来るんでしょうか。



RichTextBox1.Lines.Lengthで今何行あるかは、取得できます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-22 17:15
こんにちは、じゃんぬ です。
少々厳しいことを書くかもしれません...

引用:

みこさんの書き込み (2005-09-22 16:03) より:

'10行削除
RichTextBox1.Lines(10).Remove(0, RichTextBox1.Lines(10).Length)
↑残念ながら、何も変わりませんでした。


他人のソースを利用する際は、理解した上で使うようにしませんか?
というのも、貴方自身が理解できないものは保守できません。

で、リファレンスを見てください。(わからない時は説明書は見ますよね?)
String.Remove メソッド

で、先に提示されたソースでは中身は何も変わらないことに気づくハズです。
そう、Remove メソッドの [結果] を受け取ってませんもの。
意味のないステートメントが、ただそこに佇んでるだけですよね。

引用:

もう納期がせまっていて本当に困っています。
宜しくお願い致します。


本当に急いでるなら、掲示板で聞いてちゃまずいと思いませんか?
理由は確実性がないばかりか、即時性もないからです。
本来は有償サポートというものになります。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)