Errata極ングの冒険にでもマージエレメント?
-
08-07-2019 - |
質問
ようにしている仕事にうロンJeffriesのExtreme ProgrammingアのC#.と言っても過言ではない、しかし、第3章では、コードは、 できない, いう著者の言います。
基本的に、テキストとしているつもりだったが、いきものテキストの単語ラップを有効にテキストボックスに入力します。ればその後にカーソルを移動し、中間線、enterキーを押すと、コードの再表示を行前のカーソルを追加して、カップルのオンラインセットのHTML項の規定のタグを追加を行います。このコードと一致しないテキストを利用しているからでテキストボックス.ライン物件です。でも、どんなに多くの言葉に包まれたラインがあり、テキストボックスが唯一線の線の物件でございますのでご注意下ます。では、声明のようにコードは、"コピーのラインバッファに"と表示され違います。
いい感謝のもと経験を書いういくつかについて触れたいと思い、やっている。
感謝。
EoRaptor
解決
みュロンJeffriesます。私のブックはどこかで見たような気記憶してないのでびっくりしました。彼のメールアドレスはronjeffries acmドorgけ[ロン]で受け付けます。
(者に迷った彼のメール情報したからこちらのウェブサイト トップページ)
他のヒント
私もこの本を始めたばかりで、あなたが含めたコードは私がいる場所よりもずっと先に見えますが、まったく同じ問題を抱えていました。 「範囲外の添え字」は2つの理由で発生しました。最初はRonがテスト中だったと説明し、CursorLine()関数を記述する前に3のハードコード値を返したためです。 txtbox.Linesが文字列の配列を返すようにキャリッジリターンが必要であると言うように、テキスト行を貼り付ける必要があるか、実行前にこの値にテキストを設定する必要があるかもしれません。 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はあなたが彼らが期待することを行う素晴らしいコンポーネントで素晴らしい言語を作成したと思うので、再作成する必要はありません毎回ホイール。 私はこの本の初期段階だと言っていますが、おそらくこれらのシンプルなソリューションは十分に拡張可能ではなく、Ronはそれを考慮に入れているかもしれませんが、それがうまくいくことを言及した後、後で心配するのはXPの方法です>
ウォーレン。
print("using System;
System.Collectionsを使用。 System.Collections.Genericを使用します。 System.Textを使用して、
namespace NotepadOne {
パブリッククラスTextModel {
private String[] lines;
private int selectionStart;
private int cursorPosition;
public TextModel() {
}
public String[] Lines {
get {
return lines;
}
set {
lines = value;
}
}
public int SelectionStart {
get {
return selectionStart;
}
set {
selectionStart = value;
}
}
public int CursorPosition {
get {
return cursorPosition;
}
set {
cursorPosition = value;
}
}
public void InsertControlPText() {
lines[lines.Length - 1] += "ControlP";
}
public void InsertParagraphTags() {
int cursorLine = CursorLine();
String[] newlines = new String[lines.Length + 2];
for (int i = 0; i <= cursorLine; i++) {
newlines[i] = lines[i];
}
newlines[cursorLine + 1] = "";
newlines[cursorLine + 2] = "<P></P>";
for (int i = cursorLine + 1; i < lines.Length; i++) {
newlines[i + 2] = lines[i];
}
lines = newlines;
selectionStart = NewSelectionStart(cursorLine + 2);
}
private int CursorLine() {
int length = 0;
int lineNr = 0;
foreach (String s in lines) {
if (length <= SelectionStart && SelectionStart <= length + s.Length + 2) {
break;
length += s.Length + Environment.NewLine.Length;
lineNr++;
}
lineNr++;
}
return lineNr;
}
private int NewSelectionStart(int cursorLine) {
int length = 0;
for (int i = 0; i < cursorLine; i++) {
length += lines[i].Length + Environment.NewLine.Length;
}
return length + 3;
}
} } &quot;);
InsertParagraphTagsメソッドは、テキストボックスでEnterキーを押すと呼び出されます。
ところで、ここでのブレークは、テキストの最後でEnterキーを押したときに、範囲外の添え字エラーが発生することです。これを回避する方法を見つけることができると確信していますが、その場合、私のコードは彼のコードのようには見えません。これが私が学ぼうとしていることです。
ランディ