私もこの本を始めたばかりで、まったく同じ問題を抱えていましたが、あなたが含めたコードは私がいる場所よりも先に見えます. 「範囲外の添字」は 2 つの理由で発生しました。最初に Ron が説明したように、彼はちょうどテストしていたので、CursorLine() 関数を書く前にハードコードされた値 3 を返しました。つまり、少なくとも 4 だと思いますか? あなたが言うように、テキストを貼り付ける必要があるか、実行する前にテキストをこの値に設定する必要があるテキスト行。2 番目の理由は、CursorLine() が実装された後でも発生しますが、txtbox.Lines が string[0] を返すため、テキスト ボックスが空の場合にのみ発生しますが、Ron は、テキストが入力されたときにそれを示す「ユーザー ストーリー」を実装していると思います。ユーザーがEnterキーを押し、
著者は、C# を学習中であり、開発の疣贅をすべて表示すると述べています。これが、プロジェクトを開発する励みになると思うので、この本を研究することを選択した理由の 1 つです。私も彼の解決策を見る前に最初にコードを実行しようとしますが、おそらく私は自分の功績を認めるよりもC#を少しよく知っているか、完全にがらくたですが、私は最初に、彼は OnKeyDown() のオーバーライドは機能しないと言っていますが、TextBox から派生してそこでオーバーライドするのではなく、混乱して Form で実行しようとしたに違いないと思います。「ユーザーストーリー」を読んだときの私のコードは次のとおりです。
int curPos = txtbox.SelectionStart;
string Wrd = Environment.NewLine + "<P></P>" + Environment.NewLine;
txtbox.SelectedText = Wrd;
int pl = Environment.NewLine.Length + 3; // "<P>" length is 3
// Put text cursor inbetween <P> tags
txtbox.SelectionStart = curPos + pl;
Ron のコードとは動作が異なりますが、「ユーザー ストーリー」の私の解釈であり、テキストが選択された場合にどのように動作するか、またはテキスト カーソルが中央にある場合に行を分割するかどうかなどはわかりません。
C# でのエクストリーム プログラミング アドベンチャーの「マイ アドベンチャー」にもあります。
txtbox.GetLineFromCharIndex(txtbox.SelectionStart)
カーソル行の位置を取得し、改行やサイズ変更がないかどうかは関係ありません。私が知る限り、次のテストをほとんど行いませんでした。
txtbox.GetLineFromCharIndex(txtbox.TextLength)
これは、行の合計数を返します。これは、テキスト ボックスのサイズを変更すると変化します。
C# を使用して、私は常に既存の解決策を探しており、人々は私にこれを提案するかもしれませんが、MS は、あなたが期待することを実行する優れたコンポーネントを備えた優れた言語を作成したと思います。そのため、毎回ホイールを再作成する必要はありません。時間。私が言ったように、それはこの本の初期であり、おそらくこれらの単純なソリューションは十分に拡張可能ではなく、おそらくロンはそれを考慮に入れています.
ウォーレン。