複数行入るtextがあります。
1行目には最大10文字しか打ち込めない、リターンを押して2行目。
2行目も最大10文字しか打ち込めない、リターンを押して3行目。
という繰り返しを一つのテキストボックスで出来ますか?
テキストエリアではなくて?
編集 削除不可能ではないと思いますが、結構難しいですよ。代替え手段を考えた方がいいかも。
要は"1行に11行目を入力しようとしたときに、そのキー入力をキャンセルすれば"よいのですね。
テキストボックス(VBのはテキストエリアでしたか?よく覚えていませんけど)のKeyPressイベントで、そういう処理をしてあげればいいです。
現在の行数は、SendMessageを使ってすぐにわかるはずですから、
その行が何文字入力されているか、判断すればよいのです。
(言うのは簡単ですけど、使い物になる速度にするのかなり難しいと思いますよ)
テキストボックスにKeyPressイベント、あったかどうかよく覚えていませんが、なかったらサブクラス化して代用ですね。
そのことはなかったときに考えましょう^^;
それから、お節介ではありますけど。
> たぶん出来ないと思いますが
と思った時点で、何というか、終わりだと思います。
VBには確かに制限はありますが、ほとんどの"思いつく限りのこと"はできるものだと思います。
何事もそうですが、"できる"と思ってやってみるのが、大切だと思いますよ。
ちょっと言い過ぎちゃいましたかね、
言い過ぎだと感じたならば、非礼をお詫びします。
[VB6.0]で1行入力のみだけど、入力した時点で数字以外の入力を
削除して、数値のみ入力制限を実現した事あります。KeyPress
だったか TextChange イベントで可能ですよ。
あとはたかみちえさんも言われてるように、如何に最小限の処理で
使い物になる速度にするかでしょうね。こればっかりは色々試して
みないとナンとも…。
下記に「リッチ及びテキストボックス内の総行数・現在行・現在桁の取得」のサンプル
がありますので、それを使えば実現できるかと思います。
http://www.bcap.co.jp/hanafusa/VBHLP/TextEdit.htm
ちょっとインチキですけど。
やりたいことは実現できるかと思います。
シンプルに書く手法の1つとして書いておきます。
VBScript RegExpを参照設定
Dim tmp As String
Dim sel As Integer
Private Sub Text_Change()
If Text.Text = tmp Then
Exit Sub
End If
Dim reg As New RegExp ' 対象正規表現配列 (RegExpの略)
reg.Pattern = "^(.{0,10}\r\n)*(.{0,10})?$"
If reg.Test(Text.Text) = False Then
Text.Text = tmp
Text.SelStart = sel
End If
tmp = Text.Text
sel = Text.SelStart
End Sub
皆様ありがとうございます。
たかみちえ様、今度からは出来ないことはないという
気持ちで取り掛かれそうです!