tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルパスワードBOXのようなもの(textbox)
記事No13545
投稿日: 2009/03/26(Thu) 15:11
投稿者たたんか
ご相談させて頂きたく投稿しました!
まだプログラムを始めて経験が浅いもので、
関数とか、色々使いまわせない状況です。
お問い合わせしたい内容は、パスワードBOXのような
1Byteの英語小文字、英語大文字、数値のみ入力できる
テキストボックスを作りたく思っています。

下記に記したソースで動作させると、
一応、思っている動きに近い動作をするのですが、
11文字以上の入力があった場合に
KeyboradでBS処理を行うと、正常動作しなくなります。
例:
(1234567890abcdef)など入力し、
動作させると(1234567890abcde1)となる。

こちらの環境は
WindowsXP SP3 VB6.0となります。
よろしくお願いします。



Private Sub Text1_KeyPress(KeyAscii As Integer)
    Dim intA As Integer        '数値計算1
    Dim intB As Integer        '数値計算2
    Dim strSHKtxt As String    'ショートカット

    strSHKtxt = Text1.Text
    If (KeyAscii > 0) And (KeyAscii < 7) Then    'いくつかのキー処理
        MsgBox "特殊キーを利用する処理は出来ません。", vbCritical, "警告"
        KeyAscii = 0
        Exit Sub
    End If
    If (KeyAscii = 8) Then                    'BS処理
        intA = Len(strSHKtxt)
        intB = intA - 1

        If Not Text1.Text = "" Then
            Text1.Text = Left(strSHKtxt, intB)
        Else
            Exit Sub
        End If
        
        Text1.SelStart = Len(Text1.Text)'ここで、11文字以上の文字を認識
        Text1.SelText = Len(Text1.Text)'ここで、異常動作(入力文字の最後の文字が変更される)
        
        Exit Sub
    End If
    If (KeyAscii >= 9) And (KeyAscii <= 31) Then'いくつかのキー処理
        MsgBox "特殊キーを利用する処理は出来ません。", vbCritical, "警告"
        KeyAscii = 0
        Exit Sub
    End If
    If (KeyAscii = 10) Then'改行
        MsgBox "改行コードは登録出来ません。", vbCritical, "警告"
        KeyAscii = 0
        Exit Sub
    End If
    If (KeyAscii >= 48) And (KeyAscii <= 57) Then '数字
    
        Exit Sub
    End If
    If (KeyAscii >= 65) And (KeyAscii <= 90) Then '大文字A〜Z
        
        Exit Sub
    End If
    If (KeyAscii >= 97) And (KeyAscii <= 122) Then'小文字a〜z
        
        Exit Sub
    End If
    KeyAscii = 0                'それ以外の入力無視
    Exit Sub
End Sub

[ツリー表示へ]
タイトルRe: パスワードBOXのようなもの(textbox)
記事No13546
投稿日: 2009/03/26(Thu) 17:09
投稿者これ
こんにちは。
とりあえず
SelStartで最終位置にカーソルが動いたあと

> Text1.SelText = Len(Text1.Text)
> 'ここで、異常動作(入力文字の最後の文字が変更される)

ここで Text1の長さが追加されてますよ。
BSキーの処理は自前でする必要ないんじゃないですか?

まず、左フレームにある「当サイト内外の検索」 で
VBレスキュー(花ちゃん)のサイト内を 
『TextBox 入力制限』 で検索してみてください。
色々追加しないといけないことや制限があることがわかると思います。
がんばってください。

[ツリー表示へ]
タイトルRe: パスワードBOXのようなもの(textbox)
記事No13547
投稿日: 2009/03/26(Thu) 17:15
投稿者魔界の仮面弁士
> 下記に記したソースで動作させると、

処理しているのが KeyPress だけだとしたら、それでは不十分かと。

タブレットPC なら、ペンによる手書き入力をスルーしてしまいますし、
あるいは、マウス右クリックからの貼り付け操作も考慮せねばなりません。
ですから KeyPress のみならず、入力後の事後チェックも必要になるでしょう。


> 11文字以上の入力があった場合に

今のコードは、バックスペースを押した時にしか 11 文字の判定を
行っていないようですが、他のキーの時は不要なのでしょうか。

もし、パスワードの最大長が 11 文字という意味であれば、
TextBox の MaxLength プロパティを 11 にしておくだけで良いかと。



> KeyboradでBS処理を行うと、正常動作しなくなります。
バックスペースの場合は細かい制御は不要で、「何もしなければ良い」と思います。

 If (KeyAscii = vbKeyBack) Then
  Exit Sub
 End If

[ツリー表示へ]
タイトル【解決】Re^2: パスワードBOXのようなもの(textbox)
記事No13548
投稿日: 2009/03/26(Thu) 17:40
投稿者たたんか
これさん、魔界の仮面弁士さん
ご回答ありがとうございました!

BS処理のところにはTextBoxに何も記入されていなかった場合の処理だけ記入して、
それ以外は仮面弁士さんの記述どおり
 If (KeyAscii = vbKeyBack) Then
  Exit Sub
 End If

これでOKでした。。。

作ろうと思っているのはネットワーク先の端末にあるINIファイルから
データを読み込むプログラムです。最大長16のTextBoxを配置してあります。
接続するサーバ名の変更を行うプログラムを作っておりまして、
サーバ名やパスワードなどの処理をする上でお問い合わせさせていただきました。
自分に至らない点が多く、色々なサンプルやソースを見ながら研究させていただいております。
今後、またお世話になるかと思いますが、よろしくお願いしますm(_ _)m

[ツリー表示へ]