DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リッチテキストのスクロールバーの位置について

環境/言語:[環境(WindowsXP)、使用言語(VB.NET)]
分類:[.NET]

いつもお世話になっています。

リッチテキストのスクロールバーの位置を取得・設定することは可能でしょうか?

以下のサンプルのように、指定文字の文字色を変えています。
このとき、カーソルの位置と共にスクロールバーの位置が変わってしまうので、
スクロールバーの位置を文字色を、変える前と同じにしたいのです。

リッチテキストのScrollBarsプロパティなどを調べてみましたが、できませんでした。

どなたか、ご教示下さい。
よろしくお願いします。


'--------------------------------
'文字列"あ"を青色にするサンプル
'--------------------------------
Dim i As Integer

For i = 0 To rtbTest.Text.Length - 1
  If rtbTest.Text.Substring(i, 1) = "あ" Then
    rtbTest.SelectionStart = i
    rtbTest.SelectionLength = 1
    rtbTest.SelectionColor = Color.Blue
  End If
Next
こんにちは、ゆうこりんさん。

■No6281に返信(ゆうこりんさんの記事)
> リッチテキストのScrollBarsプロパティなどを調べてみましたが、できませんでした。

RichTextBoxScrollBars列挙体の型ですから、何もできないでしょうね。


> リッチテキストのスクロールバーの位置を取得・設定することは可能でしょうか?

難しく考えすぎなのではないでしょうか?
スクロールバーの位置を取得したり設定するのではなく、

> このとき、カーソルの位置と共にスクロールバーの位置が変わってしまうので、
> スクロールバーの位置を文字色を、変える前と同じにしたいのです。

上記を防ぐように努めれば良いのではないでしょうか?


Source:------------------------------------------------------------------

    Dim i           As Integer
    Dim iSelStart   As Integer
    Dim iSelLength  As Integer

    iSelStart = rtbTest.SelectionStart
    iSelLength = rtbTest.SelectionLength
    rtbTest.Visible = False

    For i = 0 To rtbTest.Text.Length - 1
        If rtbTest.Text.Substring(i, 1) = "あ" Then
            rtbTest.SelectionStart = i
            rtbTest.SelectionLength = 1
            rtbTest.SelectionColor = Color.Blue
        End If
    Next i

    rtbTest.SelectionStart = iSelStart
    rtbTest.SelectionLength = iSelLength
    rtbTest.Visible = True
    rtbTest.Focus()

--------------------------------------------------------------------------
java.lang.Nullpoさん。こんにちは。

java.lang.Nullpoさんに教えていただいた方法で解決しました。

ただ、Visible = False にするととリッチテキスト自体が消えてしまうことがあるので、Enable = False にしました。

ありがとうございました。


Source:------------------------------------------------------------------

  Dim i As Integer
  Dim iSelStart As Integer
  Dim iSelLength As Integer

  iSelStart = rtbTest.SelectionStart
  iSelLength = rtbTest.SelectionLength
  rtbTest.Enable = False

  For i = 0 To rtbTest.Text.Length - 1
    If rtbTest.Text.Substring(i, 1) = "あ" Then
      rtbTest.SelectionStart = i
      rtbTest.SelectionLength = 1
      rtbTest.SelectionColor = Color.Blue
    End If
  Next i

  rtbTest.SelectionStart = iSelStart
  rtbTest.SelectionLength = iSelLength
  rtbTest.Enable = True
  rtbTest.Focus()

--------------------------------------------------------------------------
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板