そこで、もう一つのテキストボックスへのテキストの追加方法であるSelectedTextを使用したテキスト挿入法では、32767文字の壁を越えられるかどうか検証してみました。
検証環境
使用したのは、.NET Framework 1.1用のコードを生成できる Microsoft Visual Studio .NET 2003です。言語はC#を使用しました。
Microsoft Development Environment 2003 Version 7.1.3091
Microsoft .NET Framework 1.1 バージョン 1.1.4322 SP1
実験に用いたパソコンは私のメインノートPCである「VAIO パーソナルコンピューター type F VGN-FW92DS」です。(Windows Vista Business Service Pack 2, 64 ビット オペレーティングシステム)
ソースコード
ソースコードは「C#でテキストボックスにテキストを追加する方法:AppendTextメソッドとSelectedTextを使用したテキスト挿入法の動作速度の比較」で用いたソースコードを .NET Framework 1.1 用に一部書き直したものです。テキストボックスへのテキスト挿入方法を選択し測定開始ボタンを押すとテキストボックスへのテキストの挿入を実行します。
挿入する文字数は、概算ですが 1,000 * 100 = 100,000 文字以上を挿入します。
ソースコードは長いので別ページに掲載しました。
記事「.NET Framework 1.1でSelectedTextを使用したテキスト挿入法は32767文字の壁を越えられるか?検証してみた」で使用したソースコード
実行結果
AppendTextメソッド
まずは AppendText メソッドの実行結果を見てみます。下記の実行結果のとおり、32767 文字を挿入したところで処理が(何事も無かったかのように)終了しています。
AppendText メソッドによるテキストボックスのテキストへのテキストの追加の実行結果
文字を32767 文字挿入したところで処理が(何事も無かったかのように)終了
下記のように、手入力でテキストを追記するとテキストボックスにテキストが追加できることから、テキストボックスの文字数の制限で32767 文字で止まっているわけではありません。
AppendText メソッドによるテキストボックスのテキストへのテキストの追加の実行結果に手入力でテキストを追加
SelectedTextを使用したテキスト挿入法
次に SelectedTextを使用したテキスト挿入法の実行結果を見てみます。AppendTextメソッドによる方法と同様に、下記の実行結果のとおり、32767 文字を挿入したところで処理が(何事も無かったかのように)終了しています。
SelectedTextを使用したテキスト挿入法によるテキストボックスのテキストへのテキストの追加の実行結果
文字を32767 文字挿入したところで処理が(何事も無かったかのように)終了
AppendTextメソッドによる方法と同様に、下記のように、手入力でテキストを追記するとテキストボックスにテキストが追加できることから、テキストボックスの文字数の制限で32767 文字で止まっているわけではありません。
SelectedTextを使用したテキスト挿入法によるテキストボックスのテキストへのテキストの追加の実行結果に手入力でテキストを追加
ちなみに、下記のようなテキストボックスのテキストをすべて入れ替える方法では、上記2つの結果とは違い32767文字の壁は無く、すべての文字列を追加することが出来ました。
textBox.Text = textBox.Text + “追加する文字列”;
テキストボックスのテキストをすべて入れ替える方法
上記2つの結果とは違い32767文字の壁は無く、すべての文字列を追加することができた
まとめ
.NET Framework 1.1でSelectedTextを使用したテキスト挿入法は32767文字の壁を越えられるか?→できませんでした!
AppendText メソッドによるテキストボックスのテキストへのテキストの追加も、SelectedTextを使用したテキスト挿入法も同じ結果となりました。
これからは、.NET Framework 1.1で動作するプログラムを作る人はあまりいないと思いますが、その場合には 32767文字の壁を意識する必要があります。
方法としては、以下のものが挙げられます。
・AppendText メソッドによるテキストボックスのテキストへのテキストの追加、SelectedTextを使用したテキスト挿入法の場合には、テキストボックスのテキストが 32767文字 に達しないようにプログラム的に処理を施す。
・処理は重いが、テキストボックスのテキストをすべて入れ替える方法 を用いる。
・その他の方法を取る
以下のページに書かれているように RichTextBox を使う方法などがあるようです。
C#(.NET)勉強中。。。:IntelligentCommandLine【2】:TextBox.AppendTextの罠
以上、なかなか困った問題ですが、.net framework 2.0 以上でソフトウェアを作る上では今回の問題は発生しなかったので、.net framework 2.0 以上 に移行するのが一番簡単な解決策かもしれません。
コメントを投稿
コメント投稿機能について