C#のwinformsでログ表示用にテキストボックスを読み取り専用にしてみる。

コンピュータ

ログ表示用のテキストボックスを作成してみます。

namespace LogView01;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        var logspace = new TextBox()
        {
            Multiline = true, // 複数行の許可
            ScrollBars = ScrollBars.Vertical, // 垂直スクロール
            ReadOnly = true, // 読み取り専用
            Location = new Point(10, 10),
            Size = new Size(512, 256),
            Text = "ログが表示されます。",
            Parent = this,
        };
        var entrybox1 = new TextBox()
        {
            Location = new Point(10, 10 + 256 + 10),
            Size = new Size(400, 24),
            Text = "こちらに入力した内容がログに追加されます。",
            Parent = this,
        };
        // ログに追加
        var entrybtn1 = new Button()
        {
            Location = new Point(10 + 400 + 10, 10 + 256 + 10),
            Size = new Size(50, 24),
            Text = "登録",
            Parent = this,
        };
        Action entry_to_log = new Action(()=>
        {
            if (logspace.TextLength == 0)
            {
                logspace.AppendText(entrybox1.Text);    
            }
            else
            {
                string t = Environment.NewLine + entrybox1.Text;
                logspace.AppendText(t);
            }
            entrybox1.Clear();
        });
        entrybtn1.Click += (s, e) => entry_to_log();

        entrybox1.KeyPress += (s, e) =>
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                entry_to_log();
                e.Handled = true;
            }
        };
        // ログをクリア
        var clearbtn1 = new Button()
        {
            Location = new Point(10 + 400 + 10 + 50 + 10, 10 + 256 + 10),
            Size = new Size(50, 24),
            Text = "クリア",
            Parent = this,
        };
        clearbtn1.Click += (s, e) => logspace.Clear();
        // ロードイベント
        this.Load += (s, e) =>
        {
            entrybox1.Focus();
        };
    }
}

登録ボタンを押すとログに追加されます。

TextBoxのReadOnlyプロパティをtureにすることで読み取り専用になります。
ユーザーからの入力が不可になりますが、セットされている文字列をコピーすることはできます。
AppendText()でTextBoxに文字列を追加しています。その際TextLengthプロパティが0の場合そのまま追加しますが、0以外の場合はEnvironment.NewLineで改行するようにしています。また、AppendText()は文字列を追加後カーソルを最終行に移動してくれます。

行数が多くなり画面に収まらなくなるとスクロールするようにしています。スクロールを有効にしている設定はScrollBars = ScrollBars.Verticalの部分です。

あと、TextBox.Clear()を実行することでテキストボックスの内容をクリアしています。

コメント