2012-01-23 9 views
1

私は_TextChangedに次のコードを使用しています:イベントが呼び出されたときにクラッシュしていますテキストをtexboxの行に追加する方法は?

string[] currentLines = new string[text.Lines.Length]; 
for (int i = 0; i < currentLines.Length; i++) { 
     currentLines[i] = text.Lines[i] + "..."; 
} 

text.Lines = currentLines; 

を。私はこれを解決する方法がわかりません。これを行うとクラッシュが発生します。

text.Lines = currentLines; 

なぜそれを修正するのですか?前もって感謝します。

+1

try catchブロックでラップし、どの行が失敗しているかを確認します。恐らくテキストはnullです。 – 0x4f3759df

+0

WinformsまたはWPF? –

+0

は2行目になります。 – Jack

答えて

0

ソリューション:

(あなたが知っていれば、私のために説明して下さい)私は知らない、このクラッシュは唯一TextBoxで発生した理由については、私はRichTextBoxに置き換えられ、それが今で正常に動作します。

4

行を設定すると、_TextChangedイベントが再度トリガーされることがあります。あなたは何を得ているのですか? StackOverflowExceptionが表示された場合、これが原因です。

これを追加して、問題を回避したり、ダニエルが答えたboolフラグアプローチを利用することができます。

また、おそらくこのquestion discussing the difference between programmatic changes and user driven changesはあなたにとって興味深いでしょう。

+1

これはおそらく例外の原因です。 –

+0

私はいくつかの例外はありません、プログラムは簡単にロックされます。 – Jack

+0

+1それはそうだと思われる。イベントハンドラは一時的に無効にし、 'text.Lines = currentLines; 'の後にリセットする必要があります。 – InBetween

1

Adam Sが答えているように、無限の再帰のためにStackOverflowExceptionが得られる可能性が最も高いです。

private void _TextChanged(...) 
{ 
    static bool settingLines = false; 
    if(settingLines) 
     return; 

    string[] currentLines = new string[text.Lines.Length]; 
    for (int i = 0; i < currentLines.Length; i++) { 
      currentLines[i] = text.Lines[i] + "..."; 
    } 

    settingLines = true; 

    text.Lines = currentLines; 

    settingLines = false; 
} 

このソリューションは、スレッドセーフではありませんが、あなたはとにかくUIコントロールと対話しているように、そのは、あなたのケースでは問題ではありません:あなたはこのようにそれを修正しようとすることができます。

+0

私はそれを徹底的に、ロックされ続ける.. – Jack

0

おそらく、問題のある回線の前に_TextChangedイベントの登録を解除し、その後に再購読してみてください。

関連する問題