[リストへもどる]
一括表示

投稿時間:2003/07/18(Fri) 14:42
投稿者名:FRIDAYNIGHT
Eメール:
URL :
タイトル:
テキストボックスのバイト制限
いつもお世話になっております。
早速ですがご質問させていただきます。

一つのテキストボックスがあります。

オプションボタンA,Bがあるとします。


オプションボタンAが選択されている場合は

テキストボックスに20バイトのみ文字の入力制限をかけて、

オプションボタンBが選択されている場合は

テキストボックスに40バイトのみ文字の入力制限をかけたいのです。



APIを使用せずにこのような操作が可能かどうか、

もし可能なら、そのヒントを受け賜りたいのですが、

よろしくお願いします。

投稿時間:2003/07/18(Fri) 15:10
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: テキストボックスのバイト制限
VBの場合半角も全角も2バイトなので、MaxLength で文字数を制限して下さい。

コードを書いている間に nanashi さんから回答があったようですが、せっかくつくったので
投稿しておきます。
半角を1バイトとして計算するなら
Private Sub Text1_Change()
    Call SetMaxByt(Text1)
End Sub

Private Sub SetMaxByt(myTextBox As TextBox)
    Dim TextLen As Long
    Dim TextByt As Long
    With myTextBox
        TextLen = Len(.Text)
        TextByt = LenB(StrConv(.Text, vbFromUnicode))
        If Option1.Value = True And TextByt > 20 Then
            Beep
            .Text = Left$(.Text, TextLen - 1)
            .SelStart = Len(.Text)
            .SetFocus
        End If
        If Option2.Value = True And TextByt > 40 Then
            Beep
            .Text = Left$(.Text, TextLen - 1)
            .SelStart = Len(.Text)
            .SetFocus
        End If
    End With
End Sub

投稿時間:2003/07/18(Fri) 15:28
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: テキストボックスのバイト制限
> オプションボタンAが選択されている場合は
> テキストボックスに20バイトのみ文字の入力制限をかけて、
> オプションボタンBが選択されている場合は
> テキストボックスに40バイトのみ文字の入力制限をかけたいのです。
>
> APIを使用せずにこのような操作が可能かどうか、
> もし可能なら、そのヒントを受け賜りたいのですが、

VBはUNICODEなので全角も半角も2Byteですが、
もし半角文字を1Byteとみなすのなら、APIなしに実現するのは面倒だと思います。

StrConvとLenBを使えば現在何Byte入力されているかが分かります。
Changeイベントでこれをチェックして、入力がオーバーしている時は
全体が指定Byte以下になるまで カーソル位置より前の文字を消していきます。
(この処理をしている間はフラグでも立てて同じ処理を通らないようにしておきます。)

これで一応出来るとは思いますが、やはりAPIを使った方が遥かに簡単ですよ。

投稿時間:2003/07/18(Fri) 16:29
投稿者名:FRIDAYNIGHT
Eメール:
URL :
タイトル:
ありがとうございました。
花ちゃんさん、nanashiさん。
返事と共に分かりやすいご説明有難うございます。

パソコンを本格的に触りだして、たった3ヶ月の私だったので
分からないところの説明が、うまく表現できませんでしたが、
的を得たお二人のアドバイス。

とっても参考になりました。



再び質問させていただき、ご迷惑をおかけする時もあると思いますが

長い目でみてやってください。


本当にありがとうございました。