- PR -

テキストボックスのカーソル行の表示(vb.net)

1
投稿者投稿内容
suzu
会議室デビュー日: 2006/04/16
投稿数: 5
投稿日時: 2006-04-17 02:10
vb.netですが、
2行分の高さのMultiLineのテキストボックスに
ボタンクリックイベントで文字列を追加していった時に、
文字列が3行目に入った場合、カーソル行の位置(3行目)を表示したいのですが、
表示は一番上(1,2行)のままとなっています。

具体的にはフォームにテキストボックス(MultiLine=true)、ボタンを配置して、
ボタンのクリックイベントで以下を実行しています。
テキストボックスにフォーカスとカーソルは設定されているのですが、
カーソル位置の行を表示できない状況です。

コード:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.TextBox1.Text &= "test"
        Me.TextBox1.SelectionStart = Len(Me.TextBox1.Text)
        Me.TextBox1.Focus()
    End Sub


またリッチテキストボックスではこの問題は発生しません。
が、リッチテキストボックスですと、入力文字により行間が変わり、
きれいに2行ピッタリを表示できないので、
普通のテキストボックスを使用したいと考えています。

宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-17 07:34
カレットの選択開始位置の決定と、スクロールは別物なので、
Me.TextBox1.ScrollToCaret()
ですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-17 10:35
一応動作確認は取れましたので、ご参考までに貼っておきます。

コード:

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.TextBox1.Multiline = True
        Me.TextBox1.Height = 32
        Me.TextBox1.ScrollBars = ScrollBars.Vertical
    End Sub

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.TextBox1.AppendText("Test")
        Me.TextBox1.SelectionStart = Me.TextBox1.TextLength
        Me.TextBox1.ScrollToCaret()
    End Sub


Len ではなく TextLength プロパティ、
あるいには Me.TextBox1.Text.Length を使った方が NCL チックで見やすいです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
suzu
会議室デビュー日: 2006/04/16
投稿数: 5
投稿日時: 2006-04-17 13:27
じゃんぬねっとさま、いつもお世話になっております。
ご教授頂きまして有難うございました。
ScrollToCaret()にて実現できました。

TextLength プロパティも今後早速使用していきたいと思います。
本当に有難うございました。
今後とも宜しくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)