テキストボックス(たぶん出来ないと思いますが)

解決


初心者です。  2003-12-26 17:35:56  No: 110979  IP: [192.*.*.*]

複数行入るtextがあります。

1行目には最大10文字しか打ち込めない、リターンを押して2行目。
2行目も最大10文字しか打ち込めない、リターンを押して3行目。

という繰り返しを一つのテキストボックスで出来ますか?

編集 削除
いな  2003-12-26 19:17:02  No: 110980  IP: [192.*.*.*]

テキストエリアではなくて?

編集 削除
たかみちえ  URL  2003-12-26 22:19:44  No: 110981  IP: [192.*.*.*]

不可能ではないと思いますが、結構難しいですよ。代替え手段を考えた方がいいかも。

  要は"1行に11行目を入力しようとしたときに、そのキー入力をキャンセルすれば"よいのですね。
テキストボックス(VBのはテキストエリアでしたか?よく覚えていませんけど)のKeyPressイベントで、そういう処理をしてあげればいいです。
現在の行数は、SendMessageを使ってすぐにわかるはずですから、
その行が何文字入力されているか、判断すればよいのです。
(言うのは簡単ですけど、使い物になる速度にするのかなり難しいと思いますよ)

  テキストボックスにKeyPressイベント、あったかどうかよく覚えていませんが、なかったらサブクラス化して代用ですね。
そのことはなかったときに考えましょう^^;


  それから、お節介ではありますけど。
> たぶん出来ないと思いますが
  と思った時点で、何というか、終わりだと思います。
VBには確かに制限はありますが、ほとんどの"思いつく限りのこと"はできるものだと思います。
何事もそうですが、"できる"と思ってやってみるのが、大切だと思いますよ。

編集 削除
たかみちえ  URL  2003-12-26 22:22:44  No: 110982  IP: [192.*.*.*]

ちょっと言い過ぎちゃいましたかね、
言い過ぎだと感じたならば、非礼をお詫びします。

編集 削除
特攻隊長まるるう  2003-12-27 00:22:50  No: 110983  IP: [192.*.*.*]

[VB6.0]で1行入力のみだけど、入力した時点で数字以外の入力を
削除して、数値のみ入力制限を実現した事あります。KeyPress
だったか TextChange イベントで可能ですよ。
あとはたかみちえさんも言われてるように、如何に最小限の処理で
使い物になる速度にするかでしょうね。こればっかりは色々試して
みないとナンとも…。

編集 削除
花ちゃん  URL  2003-12-27 00:25:20  No: 110984  IP: [192.*.*.*]

下記に「リッチ及びテキストボックス内の総行数・現在行・現在桁の取得」のサンプル
がありますので、それを使えば実現できるかと思います。

http://www.bcap.co.jp/hanafusa/VBHLP/TextEdit.htm

編集 削除
mady  2003-12-27 03:39:45  No: 110985  IP: [192.*.*.*]

ちょっとインチキですけど。
やりたいことは実現できるかと思います。
シンプルに書く手法の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

編集 削除
初心者です。  2003-12-27 09:43:32  No: 110986  IP: [192.*.*.*]

皆様ありがとうございます。

たかみちえ様、今度からは出来ないことはないという
気持ちで取り掛かれそうです!

編集 削除