日々のコンピュータ情報の集積と整理

Dr.ウーパのコンピュータ備忘録

2014年4月14日月曜日

私がC#でログをテキストボックスに書き出す時に使用していたコード

概要

  • テキストボックスにテキストを追加する方法として、SelectedText を使用する方法がある。
  • textBox.Text = textBox.Text  + “文字列”とする場合に比べて高速である。
  • 但し、テキストボックスの最後にテキストを追加するなら、今回紹介した方法ではなく AppendTextメソッド で追加することをお勧め。

本文

ソフトウェアを作る時に、ソフトウェアの動作ログをテキストボックスに書き出したいという要望は良くあります。
その場合に、私が使っていたテキストボックスへのログ書き出しのコードは以下のようになります。

ソースコード(C#)

メソッド定義

// テキストボックスへログ出力
// 引数:
//  logText : ログとして書き出すテキスト
void writeLog(String logText)
{
    textBox_Log.SelectionStart = textBox_Log.Text.Length;
    textBox_Log.SelectionLength = 0;
    textBox_Log.SelectedText = "[" + System.DateTime.Now.ToString() + "]" + logText + "\r\n";
}

メソッドの使用方法

writeLog(“テスト文字列1”);
writeLog(“テスト文字列2”);

実行結果

csharp_textbox_selection_add

[2014/04/13 12:00:00]テスト文字列1
[2014/04/13 12:00:00]テスト文字列2

事前準備

このコードを使用する場合には、あらかじめフォームデザイナーにて textBox_Log というテキストボックスを作成しておく必要があります。

かつ、textBox_LogテキストボックスのMultilineをtrueにしておく必要があります。(複数行を表示できるテキストボックスとして使用する。)

解説

textBox_Log.SelectionStart = textBox_Log.Text.Length;
textBox_Log.SelectionLength = 0;
この 2 行のコードにより、テキストボックス内でのテキストの選択開始位置をテキストボックスの最後の位置に変更し、現在選択されているテキストは無い状態にします。

textBox_Log.SelectedText = "[" + System.DateTime.Now.ToString() + "]" + logText + "\r\n";
このコードにより、テキストボックスの最後の部分(最初の2行のコードで選択位置を指定した)に現在の日付と、ログとして書き出したいテキストを挿入しています。


テキストボックスのテキストを追加する方法として、

    textBox_Log.Text = textBox_Log.Text + “追加する文字列”;

とする方法もありますが、この場合テキストボックス内のすべてのテキストを入れ替えることになるので、動作が重くなってしまいます。


また、 テキストボックスのAppendTextメソッドで追加する方法もあります。

テキストボックスの最後にテキストを追加するなら、今回紹介した方法ではなく AppendTextメソッド で追加することをお勧めします。(.NET Framework 1.1では、AppendTextメソッドにより32767文字以上のテキストを追加できないというバグがありましたが、.NET Framework 2.0以降では正常に動作するようです。ちなみに、.NET Framework 1.1では今回紹介した方法もAppendTextメソッド による方法と同じ結果になりちゃんと動きませんでした。)(*1)(*2)(*3)


今回紹介した方法と AppendTextメソッドでテキストを追加する方法の比較は、次の記事にて紹介します。








参考文献

*1

@IT:.NET TIPS TextBoxコントロールに長いテキストを追加するには? - C# VB.NET Windowsフォーム@IT:.NET TIPS TextBoxコントロールに長いテキストを追加するには? - C# VB.NET Windowsフォーム

*2

C#(.NET)勉強中。。。:IntelligentCommandLine【2】:TextBox.AppendTextの罠C#(.NET)勉強中。。。:IntelligentCommandLine【2】:TextBox.AppendTextの罠

*3
Dr.ウーパのコンピュータ備忘録: .NET Framework 1.1でSelectedTextを使用したテキスト挿入法は32767文字の壁を越えられるか?検証してみたDr.ウーパのコンピュータ備忘録: .NET Framework 1.1でSelectedTextを使用したテキスト挿入法は32767文字の壁を越えられるか?検証してみた






関連記事

関連記事を読み込み中...

同じラベルの記事を読み込み中...

");b.document.body.innerHTML="

"+a.innerHTML+"

"}; // ボタン生成・装飾を順序立てて遅延実行 setTimeout((function (){ (function(){for(var a=document.getElementsByTagName("pre"),b=0;b Chrome ユーザは、新しいウィンドウで開いたコードをコピーしてください。[理由]
';var d=a[b];d.parentNode.insertBefore(c,d.nextSibling);preArray.push(a[b].cloneNode(!0))}})(); // 装飾 (function(){function k(a){var d=document.createElement("link");d.setAttribute("rel","stylesheet");d.setAttribute("type","text/css");d.setAttribute("href",a);g(d)}function l(a,d){var b=document.createElement("script");b.setAttribute("type","text/javascript");b.setAttribute("src",a);d?(b.onload=b.onreadystatechange=function(){if(!b.readyState||/loaded|complete/.test(b.readyState))b.onload=b.onreadystatechange=null,e=!1,h()},n(function(){g(b)})):g(b)}function g(a){document.getElementsByTagName("head")[0].appendChild(a)} function p(a){m(function(){e=!0;a();e=!1})}function n(a){m(function(){e=!0;a()})}function m(a){e||0!=c.length?c.push(function(){a();h()}):(a(),h())}function h(){if(!e&&0 //]]>