[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/10/07(Sat) 17:08
投稿者名:ブンブン
Eメール:
URL :
タイトル:
TEXTBOXで行数を固定
VB6.0のTEXTBOXですが、今回MultiLineをTRUEにした場合、
入力できる行数を制限したいのですが、何か方法は
ありますでしょうか?

Enterキーで指定行数を超えると改行できないようにしたいと思います。
自動改行の場合もそれ以上は入力ができないようにしたいのですが。
可能でしょうか?

行数は取得できるようですが、行数固定ができません。

投稿時間:2006/10/07(Sat) 17:51
投稿者名:
Eメール:
URL :
タイトル:
Re: TEXTBOXで行数を固定
> VB6.0のTEXTBOXですが、今回MultiLineをTRUEにした場合、
> 入力できる行数を制限したいのですが、何か方法は
> ありますでしょうか?
>
> Enterキーで指定行数を超えると改行できないようにしたいと思います。
> 自動改行の場合もそれ以上は入力ができないようにしたいのですが。
> 可能でしょうか?
>
> 行数は取得できるようですが、行数固定ができません。
固定行以上にしようとしたときの対処が曖昧ですが、
テキストボックスのChangeイベントで行数を得て、固定行以上になったら何か(例外or適切な処理)すればいいだけなのではないでしょうか?

投稿時間:2006/10/07(Sat) 18:02
投稿者名:ブンブン
Eメール:
URL :
タイトル:
Re^2: TEXTBOXで行数を固定
> テキストボックスのChangeイベントで行数を得て、固定行以上になったら何か(例外or適切な処
理)すればいいだけなのではないでしょうか?

早速お返事ありがとうございます。
そうですね。それも考えましたが、結局行数がわかるのは行数が増えてから
になってしまうのですよ。
自動改行を考えた場合、いつの時点で次の行に移動するかが
移動した直後しかわからず困ってます。(Enterでの改行はイベントでわかりますが…)
超えた後テキストボックス内でカーソルを最後の行まで戻して、超えた行の文字は
消すと言う事になるのでしょうか???

投稿時間:2006/10/07(Sat) 18:27
投稿者名:ブンブン
Eメール:
URL :
タイトル:
解決
> テキストボックスのChangeイベントで行数を得て、固定行以上になったら何か(例外or適切な処理)すればいいだけなのではないでしょうか?

Changeイベントでコードを書いたらできたようです。
(行数の取得はこのサイトに載ってます)

Private Sub Text1_Change()

    Dim rc, cnt

    'キャレットが移動した
    cnt = SendMessage(Me.Text1.hWnd, EM_GETLINECOUNT, -1, 0) 'テキストの行数を取得する
    rc = SendMessage(Me.Text1.hWnd, EM_LINEFROMCHAR, -1, 0) + 1 '現在の行番号を取得
    
    If cnt > 5 Then
        Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
        Text1.SelStart = Len(Text1.Text)
    End If

end sub


も さんありがとうございます!!!

投稿時間:2006/10/07(Sat) 18:57
投稿者名:ブンブン
Eメール:
URL :
タイトル:
解決(補足)
>
> Changeイベントでコードを書いたらできたようです。
> (行数の取得はこのサイトに載ってます)
>
>  Private Sub Text1_Change()
>
>     Dim rc, cnt
>
>     'キャレットが移動した
>     cnt = SendMessage(Me.Text1.hWnd, EM_GETLINECOUNT, -1, 0) 'テキストの行数を取得する
>     rc = SendMessage(Me.Text1.hWnd, EM_LINEFROMCHAR, -1, 0) + 1 '現在の行番号を取得
>    
>     If cnt > 5 Then
>         Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
>         Text1.SelStart = Len(Text1.Text)
>     End If
>
> end sub
>

補足です。上記は5行までの制限で以下のコードを入れないと
改行が入ってしまいます。ですのでKeyPressイベントに
下記のソースが必要です。

Private Sub Text1_KeyPress(KeyAscii As Integer)

    Dim rc, cnt
    
    cnt = SendMessage(Me.Text1.hWnd, EM_GETLINECOUNT, -1, 0) 'テキストの行数を取得する
    rc = SendMessage(Me.Text1.hWnd, EM_LINEFROMCHAR, -1, 0) + 1 '現在の行番号を取得
    
  '5行以上は改行不可。
    If cnt > 4 Then
        '改行コードが入力されたか
        If KeyAscii = 13 Then
            '入力をキャンセルする
            KeyAscii = 0
        End If
    End If

End Sub