4

この素晴らしいサービスについて質問を投稿するのはこれが初めてです。今日はそれを読むだけでとても役に立ちました。

現在、多くの TextBox を使用する必要がある小さな C# アプリケーションを作成しています。TextBox のプロパティで、 MultiLineおよびWord-Wrap関数をチェックしました。そのため、ユーザーがテキストを入力すると、複数行で正しく表示されます。

私の問題は、フォームに表示されるこれらの行を、1 つの大きな文字列ではなく、文字列のリストで取得する方法です。

私はまだ天気を区別していませんWord-Wrap Functionは新しい行を作成するか、すべての行の最後に "\n\r" を追加します。TextBox.Linesから行を取得しようとしましたが、 TextBox.Lines[0] しかありません。これには、TextBox フォーム全体の文字列が含まれています。

私はすでに多くのことを試し、多くのリソースを調査しましたが、この問題に対する適切な解決策をまだ見つけていません。

4

3 に答える 3

6

ここには多くのコーナーケースがあります。使用するコア メソッドはTextBox.GetFirstCharIndexFromLine()、TextBox が WordWrap プロパティを適用した後に行を反復できるようにする です。定型コード:

    var lines = new List<string>();
    for (int line = 0; ;line++) {
        var start = textBox1.GetFirstCharIndexFromLine(line);
        if (start < 0) break;
        var end = textBox1.GetFirstCharIndexFromLine(line + 1);
        if (end == -1 || start == end) end = textBox1.Text.Length;
        lines.Add(textBox1.Text.Substring(start, end - start));
    }
    // Do something with lines
    //... 

行末がlinesに含まれることに注意してください。

于 2012-10-01T23:23:34.867 に答える
3

行数を取得して、行の配列を直接構築することができます。これには、WordWrap によって生成された行が含まれます。

// Get the line count then loop and populate array
int lineCount = textBox1.GetLineFromCharIndex(textBox1.Text.Length) + 1;

// Build array of lines
string[] lines = new string[lineCount];
for (int i = 0; i < lineCount; i++)
{
    int start = textBox1.GetFirstCharIndexFromLine(i);
    int end = i < lineCount - 1 ? 
        textBox1.GetFirstCharIndexFromLine(i + 1) :
        textBox1.Text.Length;                            
    lines[i] = textBox1.Text.Substring(start, end - start);
}
于 2012-10-02T01:19:19.697 に答える
0

シングルを引き出して、stringそれで好きなことをすることができます。

区切り記号に基づいて文字列を文字列のリストに分割するのは簡単です:

https://stackoverflow.com/a/1814568/13895

于 2012-10-01T22:59:19.280 に答える