Re[3]: TextBoxのBeep音を消す方法


[コメントツリー表示を見る] [発言時刻順表示を見る]

Posted by Uz on 2001/03/09 22:53:05

In Reply to: Re[2]: TextBoxのBeep音を消す方法 Posted by ao on 2001/03/09 14:25:07


    > コードではなく、MaxLengthが絡むと駄目なようです。
    > 試したのは以下のコードです。
    > ROFM上にTextBoxとボタンを配置します。
    > TextBoxの方のMaxLenght=5とし、「12345」→ENTERとすると
    > 音が鳴った後にフォーカス遷移します。
    > MaxLengthはEnterも入力値とみなすんでしょうか?
    >
    > Private Sub Text1_KeyPress(KeyAscii As Integer)
    > If KeyAscii = vbKeyReturn Then 'Enterだったら
    > SendKeys "{TAB}" 'TABキーに置き換える
    > KeyAscii = 0 '当イベント内でのEnterキー処理を終了させる
    > End If
    >
    > End Sub

    そうですね、MaxLengthのチェックが先に入ってるみたいですね。
    半角だけの入力ならMaxLengthを使わず、APIでLimitをつければ
    ならなくなると思います。

    (全角は2バイト、半角1バイトでカウントして制限かけるので
    VBのMaxLengthとは完全には置き換えられませんが。)


    Option Explicit

    Private Const EM_LIMITTEXT As Long = &HC5
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
    ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any _
    ) As Long

    Private Sub SetTextBoxLimitText(objText As TextBox, nLen As Long)
    Call SendMessage(objText.hwnd, EM_LIMITTEXT, nLen, ByVal 0&)
    End Sub

    Private Sub Form_Load()
    Call SetTextBoxLimitText(Text1, 5)
    Call SetTextBoxLimitText(Text2, 10)
    End Sub

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    Call SendKeys("{TAB}")
    KeyAscii = 0
    End If
    End Sub

    Private Sub Text2_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    Call SendKeys("{TAB}")
    KeyAscii = 0
    End If
    End Sub


記事スレッド一覧