- ベストアンサー
NumericUpDownでキャレット移動
- VB.NET VisualStudio2017でWindowsアプリケーションを開発しており、テキストボックスがフォーカスされた際には入力済の文字列を全選択し、その状態で任意の場所をクリックするとキャレットを移動する方法を探しています。
- TextBoxではGetCharIndexFromPositionメソッドを使用してキャレットの移動ができますが、NumericUpDownコントロールではこのメソッドが存在しないため、他の方法を探しています。
- Windows APIのSendMessageメソッドも調査しましたが、TextBox向けの事例しか見つかりませんでした。NumericUpDownコントロールでキャレット移動する良い方法をご存知の方がいらっしゃれば、教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ご紹介いただいたサイトではSelectAllメソッドが使用されていますが、NumericUpDownコントロールにはSelectAllメソッドはありません。 以下の二つの方法があるようです。 NumericUpDown1.Select(0, NumericUpDown1.Text.Length) CType(NumericUpDown1.Controls(1), TextBox).SelectAll()
その他の回答 (2)
- kkkkkm
- ベストアンサー率66% (1721/2591)
> これと同じことをNumericUpDownコントロールで行いたいのですが、 先に紹介したサイトの方法ではできなかったということでしょうか? charIndexは求めませんが別の手法でできてると思いますが…。
補足
kkkkkm様 コメントありがとうございます。 >先に紹介したサイトの方法ではできなかったということでしょうか? そうですね。出来なかったです。 ご紹介いただいたサイトではSelectAllメソッドが使用されていますが、NumericUpDownコントロールにはSelectAllメソッドはありません。 NumericUpDownコントロールで紹介いただいたサイトのコードを適用してもSelectAllメソッドのところでエラーとなるので、その箇所をコメントアウトするとフラグのOn Offの処理しか残りませんので・・・。 NumericUpDownコントロールに12345といった5桁の数値を設定して5の右側の位置でMouseDownしても1の左側にキャレットが移動してしまいます。
- kkkkkm
- ベストアンサー率66% (1721/2591)
こちらの方法を試してみてはいかがでしょう。 GetCharIndexFromPositionは使わない方法です。 TextBoxをクリックした時に表示テキストを全選択する http://windyrings.jugem.jp/?eid=850
補足
kkkkkm様 コメントありがとうございます。 少し説明が足りない部分があったかも知れませんが、 やりたいことはフォーカスを受取ってテキストが全選択された状態で、 そのテキストの任意の場所をマウスでクリックした際に、 クリックした場所にキャレットを移動したい、ということです。 上記のtxtTest.Select(charIndex, 0)の部分です。 これと同じことをNumericUpDownコントロールで行いたいのですが、 マウスのポイントから上記charIndexを求める手段が無くて困っています。
お礼
NumericUpDown単体で試すと取得したcharIndexの精度はいまいちでしたが、 お客様が一番求められている画面の数値コントロールは明細のグリッド上のコントロールで、 その画面のコントロールで上手くいったので解決とします。ありがとうございました。 該当の明細コントロール上の数値コントロールは当初からスピンボタンが表示されていないものだったため、charIndexの精度が保たれたものと解釈しました。 いろいろとお知恵を拝借しありがとうございました。