質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

3965閲覧

WPF TextBox でカーソル位置が最下行にある事を知る方法

mnhktm

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/01/05 09:41

編集2019/01/06 11:54

WPFのTextBoxを使ってプログラムを作っています。

カーソルがTextBoxの最下行に来た場合、カーソルが
TextBoxの最下行にある事を知る方法はないでしょうか?
カーソル移動はTextView.Select()を使用しています。

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

TextBox.CaretIndexプロパティでキャレットのインデックスは取れますが、
そこから行数に変換するにはTextBox.GetLineIndexFromCharacterIndex()関数を使います。
あとは全体の行数はTextBox.LineCountプロパティで取れますので、

csharp

1var isBottomLine = textBox.GetLineIndexFromCharacterIndex(textBox.CaretIndex) == textBox.LineCount - 1;

こんな感じの判定を行ってもらえば良いかと思われます。

投稿2019/01/07 05:57

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnhktm

2019/01/07 14:34

ご回答ありがとうございます。 textBox.GetLineIndexFromCharacterIndex(textBox.CaretIndex) は余計な計算をせず使えそうです。 全体の行数はTextBox.LineCountで取れるのですね。私は原始的なやりかたで、文字列先頭を0として 改行の次を1、さらに次の改行の次を2としていました。 TextBox.LineCount と TextBoxの表示行でいろいろ計算をしながら試行錯誤してみます。
guest

0

WPFのTextBoxにおいてキャレット(カーソル)がどの行にあるかを直接知る方法は無いので、
現在のキャレット位置インデックスをTextBox.CaretIndexプロパティで取得して
TextBox.CaretIndex Property
TextBox全体の文字列を行単位に分割してそのインデックス(文字位置)がどの行にあるかを判定するしか無いかと。

後は要望に応じてTextBox.ScrollToLineで目的の行を必ず表示できるようにするとか、TextBox.CaretIndexに新しいキャレットの位置をセットするとかで操作すれば良いのではないでしょうか。

投稿2019/01/07 02:45

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mnhktm

2019/01/07 14:23

ありがとうございます。 キャレットの位置が取得できる事を確認しました。ScrollToLineは使えそうですが、カーソル移動が 上下する場合、逆に移動する場合、キャレット位置がTextBox外(上限より上)に隠れた状態になる 場合があるようです。私のやり方がまずい可能性はありますが。 因みにカーソル移動するための行計算は、は全文字列の各先頭行のバイト位置を配列に入れ、配列の 要素を行Noと合わせています。そして、 TextBox.Select(LineTopCh[step], LineLength[step])でアクティブ行を反転させながらstepの値を変えて上下に進めています。 これにご教示頂いた TextBox.ScrollToLine(step)が使えそうなので、合わせ技で使うと途中までは最下行に来た時丁度良い表示位置になりますが、上記のように大きく行をバックさせるとTextBox外に消えていく場合があります。なかなか厄介です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問