テキストボックスの改行回数を制限したい

タグの編集
投稿者 たすく  (社会人) 投稿日時 2009/9/8 21:36:20


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

テキストボックスの改行を5行までと制限したいのですが、どうしたらよろしいでしょうか?
5行目にフォーカスがある状態でEnterキー入力を無効にしたいのですが。
ネットを参考にし、2行までの改行はできました。

Private Sub TextA_KeyPress(KeyAscii As Integer)

If KeyAscii = vbKeyReturn Then
    If InStr(Me.TextA.Text, vbCrLf) <> 0 Then
        KeyAscii = 0
    End If
End If
End Sub


また、できれば、テキストボックスに6行以上の文章を貼り付けた際、
5行までの表示する処理をいれたいです。
今のところ、下記のコードで2行までの表示はできています。

Private Sub TextA_Change()

Dim rPos As Long
Dim lPos As Long

lPos = InStr(Me.TextA.Text, vbCrLf)
If lPos <> 0 Then
rPos = InStrRev(Me.TextA.Text, vbCrLf)
If lPos <> rPos Then
Me.TextA.Text = Left$(Me.TextA.Text, rPos) & Mid$(Me.TextA.Text, rPos)
Me.TextA.SelStart = Len(Me.TextA.Text)
End If
End If
End sub

 

それぞれどこを修正するばよいのでしょうか?
ご教授のほど、よろしくお願いいたします。 
投稿者 neptune  (社会人) 投稿日時 2009/9/8 21:57:06
多分これでいけるかと思います。

テキスト ボックスの内容を操作する方法
http://support.microsoft.com/kb/186271/ja
ここに必要な情報はそろっているような。

後、何行あるかはvbcrlfを""で置換して、置換前後の文字列の数を比較したら取得
できるのでは?

>それぞれどこを修正するばよいのでしょうか?
は上記を見てから、先ずは自分で頑張ってみて下さい。
投稿者 たすく  (社会人) 投稿日時 2009/9/9 01:24:42
neptuneさん

ご回答ありがとうございます。
教えてくださったテキストボックスの内容を操作する方法を実際に実行し、
一行一行デバッグしていき、複数行の処理がどこでやっているかはわかりましたが、
3時間粘ってみましたが、一向に出来ておりません。

また、テキストボックスの貼り付けた処理については、
お手上げ状態です。。

アドバイスお願いいたします。。
投稿者 ?-?  (その他) 投稿日時 2009/9/9 01:38:07
ヒント:
TextA_KeyPress処理
改行コードが見つかった場合に改行できないように処理している。
これを、4回改行コードが見つかった場合には改行できないようにすればいい。
実現方法はいくつかあるが、繰り返し処理と組み合わせることで可能。

TextA_Change処理
これもTextA_KeyPressと似たようなこと。
改行コードの数を確認し、5つ目の場所が見つかったら、その場所より前の文字のみをLeftなどで取得すればいい。

どう?
ここまで書けばほとんど解答してるから、できるんじゃないかな?
投稿者 neptune  (社会人) 投稿日時 2009/9/9 02:12:54
これまでの要件を纏めるとこんな感じかな?

1.5行目にフォーカスがある状態ではEnterキー入力を無効にしたい
2.テキストボックスに6行以上の文章を貼り付けた際、5行までの表示する処理をいれたい
 ・・・・それ以降はどうするという疑問が湧いてくる。
3.また、テキストボックスの貼り付けた処理については、・・・
 ・・・・コピー→TextBoxに貼り付けした際にも1.2.を適用したい?という事?

 MSのサポート技術情報の所と、?-? さんのアドバイスで出来ると思いますが。。。。
今どこまで出来て何で躓いているか書いた方がより良いアドバイスを受けられますよ。
投稿者 たすく  (社会人) 投稿日時 2009/9/9 04:14:41
neptuneさん、?-?さん

ご回答ありがとうございます。

おふたりのアドバイスのおかげで、
API、繰り返し処理、どちらを用いてもできるようになりました。

本当に感謝しております。ありがとうございました。