質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

7527閲覧

VS C#でリッチテキストボックスの行を制御

ParaParaDance

総合スコア56

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/07/30 10:02

編集2020/07/31 00:51

VS C#ですが、Windows FormのRichTextBoxに動作を行った後、動作結果を表示しています。
動作結果は、既存の記録は残し、新しい結果を改行していきます。

しかし、改行が長くなってしまうとTextboxの表示枠を超えて下に隠れてしまい、スクロールしないと見えなくなります。これを表示枠の大きさ以上にならないようにしたいです。

例えば、表示されるのは10行までで、10行以上は最も古い行が削除される。

どうすればよいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/07/30 10:13

リッチテキストボックスは複数種類あります。
y_waiwai

2020/07/30 10:52

質問が意味不明です。具体的に、どういうふうにしたいんでしょうか
Daregada

2020/07/30 11:06

「WinFormのRichTextBoxです」とか、質問文に情報を追加してください。
guest

回答3

0

TextBoxBase.Linesプロパティ
こちらを利用されてはどうでしょうか。
Listにして、RemoveAtで最初の項目を消し、Linesプロパティに設定しなおせば最初の行が消えます。

投稿2020/07/31 01:11

YAmaGNZ

総合スコア10489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

古い行の削除にも需要はあると思いますので回答しておきます。

c# - Delete a specific line in a .NET RichTextBox - Stack Overflow
で、書式を維持したままの行削除を確認できました。

cs

1using System; 2using System.Drawing; 3using System.Linq; 4using System.Windows.Forms; 5 6namespace Questions281426 7{ 8 public partial class Form1 : Form 9 { 10 private Timer timer1; 11 private RichTextBox richTextBox1; 12 private int c; 13 14 public Form1() 15 { 16 InitializeComponent(); 17 18 timer1 = new Timer 19 { 20 Enabled = true, 21 Interval = 1000, 22 }; 23 timer1.Tick += Timer1_Tick; 24 25 richTextBox1 = new RichTextBox 26 { 27 Dock = DockStyle.Fill, 28 }; 29 Controls.Add(richTextBox1); 30 } 31 32 private void Timer1_Tick(object sender, EventArgs e) 33 { 34 // なんか追加 35 richTextBox1.SelectionStart = richTextBox1.TextLength; 36 richTextBox1.SelectionLength = 0; 37 richTextBox1.SelectionColor = ++c % 2 == 0 ? Color.Red : Color.Blue; 38 richTextBox1.AppendText($"あああああ{c}\n"); 39 40 // 10行以上あったら先頭から削除 41 while(10 < richTextBox1.Lines.Count()) 42 { 43 //[c# - Delete a specific line in a .NET RichTextBox - Stack Overflow](https://stackoverflow.com/questions/1329347/delete-a-specific-line-in-a-net-richtextbox/20983817#20983817) 44 richTextBox1.SelectionStart = richTextBox1.GetFirstCharIndexFromLine(0); 45 richTextBox1.SelectionLength = richTextBox1.Lines[0].Length + 1; 46 richTextBox1.SelectedText = string.Empty; 47 } 48 } 49 } 50}

投稿2020/07/31 08:54

編集2023/07/22 10:04
TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

新しい結果を追加するときに、あらかじめRichTextBoxにフォーカスを移動させてから、AppendTextメソッドでテキストを追加すれば、自動的に最終行までスクロールします。

追加:
なお、古い内容はスクロールして見えなくなりますが、「そこを見たい」という場合に備えて自動的に消さないほうがいいかと思います。「内容をクリアする」処理は、自動的ではなく、ボタンやメニュー項目に割り当てて、ユーザーに指示させた方がいい。

投稿2020/07/31 01:08

編集2020/07/31 01:15
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ParaParaDance

2020/07/31 01:49

AppendTextメソッドだけではだめでした。 AppendTextでテキストを追加した後に tMainwindow.ScrollToCaret();を実行する必要がありました。 有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問