• ベストアンサー

テキストボックスに表示された行の番号を取得したい

VB.NETで簡単なテキストエディタを作っています。 テキストボックスをフォームに張り付けることにより、画面表示及び入力は出来るようになりました。それで、ほかのエディタ(秀丸など)のように、カーソルが、ある行にきたとき、その行番号を画面の下のほうに表示しようと考えています。そのため、まず、カーソルが位置づけられている行の行番号を取得したいのですが、その方法がわかりません。テキストボックスのプロパティ、メソッドを探したのですが、そのようなものは見あたりませんでした。どなたかご存じの方おりましたら、ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • fantasis
  • ベストアンサー率26% (14/52)
回答No.2

.NETではどうかわかりませんが、VB6.0でそのような関数があります。簡単に解説でも。 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long Const EM_LINEFROMCHAR = &HC9 'カーソルがある列数(縦)を取得 Const EM_GETLINECOUNT = &HBA 'テキストボックスでの最大列数(縦)を取得する Const EM_LINEINDEX = &HBB 'カーソルがある行(横)の位置を取得する Const EM_LINELENGTH = &HC1 'カーソルがある行(横)の最大行数を取得する Const EM_GETSEL = &HB0 'カーソルが何行目(横)にあるかを取得する Private Sub GetInfomation() Dim Line as Long, Midle as Long 'Lineには列数を、Midleには何行目かを格納します。 Line = SendMessage(Text1.hwnd, EM_LINEFROMCHAR, -1, 0) + 1 Midle = SendMessage(Text1.hwnd, EM_GETSEL, 0, 0) Midle = Midle \ 65536 - Top + 1 End Sub ただし、MidleにはLenB関数のように、全角なら2、半角なら1と計算されますので、Midle=文字数とは限りません。

tatsu99
質問者

お礼

このような回答を期待しておりました。ありがとうございます。早速、調べてトライしてみます。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

表示文字列の先頭から、現在のカーソル位置までの改行の数を数えれば行数になりません?

tatsu99
質問者

お礼

うーん。なるほど。やはり、一発で行番号を求める方法はないということですね。ありがとうございました。

関連するQ&A