アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2003/08/24 09:45

.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=文字数とは限りません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/08/25 12:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!