話題(スレッド) カレント行の取得方法を教えてください。 のメッセージ

カレント行の取得方法を教えてください。 (2016-11-17 17:27, ganohr, #79043)

はじめまして。面白いコンポーネントの公開ありがとう御座います。

アウトラインエディタを自作してみたいと思い、使用させていただいております。

現在、カレント行の内容を取得しようと試みていますが、
折り返しが有効になった状態で以下のコードを実行するとエラーが起こります。

int lineIndex;
int columnIndex;
azuki.GetLineColumnIndexFromCharIndex(azuki.CaretIndex, out lineIndex, out columnIndex);

int headColumn = azuki.GetCharIndexFromLineColumnIndex(lineIndex, 0);
int lineLength = azuki.GetLineLength(lineIndex);
var line = azuki.GetTextInRange(headColumn, headColumn + lineLength);

Debug.WriteLine(
"Index {0} : ({1}, {2}), head : {3}, depth = {4}, line = {5}"
, azuki.CaretIndex
, lineIndex
, columnIndex
, headColumn
, line
);

エラー詳細:
エラー発生箇所:azuki.GetLineLength(lineIndex)の呼び出し
System.ArgumentOutOfRangeException: Invalid line index was given (lineIndex:1, this.LineCount:1).
パラメーター名:lineIndex



例えば1行目をずっとAキーを押して文字入力していくと、AAAA…と敷き詰められ、任意の位置で折り返され、物理行は1で論理行は2となりますが、GetLineColumnIndexFromCharIndexを用いて得られるlineIndexは物理行で、GetLineLengthは論理行で指定しないといけない? ため、GetLineLengthの指定時にOutOfRangeが発生します。

そもそも

azuki.GetLineColumnIndexFromCharIndexに、azuki.CaretIndexを使ったらいけないような感じを受けるのですが、いまいち分かりませんでした。

お手数をおかけして申し訳ありませんが、解決策をご教授頂ければ幸いです。m(_ _)m

メッセージ #79043 への返信×

ログインしていません。投稿を区別するために投稿者のニックネームをつけてください(ニックネームの一意性は保証されません。全く別の人も同じ名前を利用することが可能ですので本人であることの特定には利用できません。本人であることを保証したい場合にはログインして投稿を行なってください)。 ログインする

話題(スレッド)

カレント行の取得方法を教えてください。 (2016-11-17 17:27, ganohr, #79043)
Re: カレント行の取得方法を教えてください。 (2016-11-18 22:02, sgry, #79048)