キーボードからの入力制限をかけるには?(VB6.0)

解決


VB初心者  2005-10-17 13:49:27  No: 126314  IP: [192.*.*.*]

要件
1.キーボードからの入力制限をかける

アルファベットのAを押下時、0を表示する。同じようにBを押下時、1を表示する。
Cを押下時、2を表示・・・・・・Jを押下時、9を表示する。

文字入力 変換文字 
    0        A 
    1        B 
    2        C 
    3        D 
    4        E 
    5        F 
    6        G 
    7        H 
    8        I 
    9        J 

2.A〜J、Backspace、Delete、Tab、矢印キー以外のキーボードからの入力をうけつけない。

3.Select Case 文を使用する。

4.終了ボタンを押下すると、画面を閉じる。

5.KeyPress イベントを使用する。

編集 削除
!  2005-10-17 14:29:59  No: 126315  IP: [192.*.*.*]

もう少し、お願いしますとかないの?
自分の用件だけ書いてて、読んでて気分悪い

編集 削除
VB初心者  2005-10-17 14:37:36  No: 126316  IP: [192.*.*.*]

質問だけ入力してしまい、すいませんでした。
わたくし、つい最近にVBをはじめたばかりでして、
かなり初歩的なことだとは思うのですが、この掲示板なら
解決していただけると思い、書き込みいたしました。
よろしくお願いします。

編集 削除
コボル  2005-10-17 14:44:12  No: 126317  IP: [192.*.*.*]

ちょっと面白い。
>4.終了ボタンを押下すると、画面を閉じる。

KeyPress イベントの引数(keyascii)を
Chr(KeyAscii)で文字列へ変換してみてください。
あとは条件分岐で必要なKeyのみ処理をする。

編集 削除
座布団  2005-10-17 14:50:02  No: 126318  IP: [192.*.*.*]

SelectCase分を使用するって、なんだか学校の宿題みたいですね。

どこからどこまでを解決すればいいのか分かりませんが、
とりあえず、KeyPressイベントを作って、
その中にSelectCase文を置いてみては?

編集 削除
VB初心者  2005-10-17 15:04:57  No: 126319  IP: [192.*.*.*]

ありがとうございます。
座布団さんのおっしゃるとおり、自分でやってみて、KeyPressイベントとSelectCase文を
使うということまではわかったのですが、そこから先がうまくいきません。
『Select Case に対応する Case がありません。』というコンパイルエラーが出て、そこから進みません・・・。

編集 削除
VB初心者  2005-10-17 15:11:56  No: 126320  IP: [192.*.*.*]

実は先週から始めたばかりですので用語などがほとんどわからないまま
やっております。
下に現状のソースコードを記入しておきます。
VBが使える方から見れば「なんじゃこりゃ?」と思われると
思いますが、これが現在の自分の限界です・・・。

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim A, B, C, D, E, F, G, H, I, J As Integer

Select Case Text1
Case 0
If KeyAscii = vbKeyA Then
    KeyAscii = vbKey0
Case 1
 If KeyAscii = vbKeyB Then
    KeyAscii = vbKey1
Case 2
If KeyAscii = vbKeyC Then
    KeyAscii = vbKey2
Case 3
If KeyAscii = vbKeyD Then
    KeyAscii = vbKey3
Case 4
If KeyAscii = vbKeyE Then
    KeyAscii = vbKey4
Case 5
If KeyAscii = vbKeyF Then
    KeyAscii = vbKey5
Case 6
If KeyAscii = vbKeyG Then
    KeyAscii = vbKey6
Case 7
If KeyAscii = vbKeyH Then
    KeyAscii = vbKey7
Case 8
If KeyAscii = vbKeyI Then
    KeyAscii = vbKey8
Case 9
If KeyAscii = vbKeyJ Then
    KeyAscii = vbKey9
End If
Case Else
    KeyAscii = 0
End Select
End Sub

編集 削除
homework  2005-10-17 15:13:33  No: 126321  IP: [192.*.*.*]

>『Select Case に対応する Case がありません。』というコンパイルエラーが出て、そこから進みません・・・。
読んで字のごとくだと思いますが・・・
Select Case 変数
    Case 値1
        ・・・
    Case 値2
        ・・・
    Case Else
        ・・・
End Select
のような形になってますか?

編集 削除
homework  2005-10-17 15:16:41  No: 126322  IP: [192.*.*.*]

うわ。かぶったorz
VB初心者のコードで気になることは
Case0からCase8のIf文に「End If」の記述がないことですかね〜

編集 削除
VB初心者  2005-10-17 15:29:50  No: 126323  IP: [192.*.*.*]

ありがとうございます。
homeworkさんのおっしゃるとおり、
Case0からCase8のIf文にEnd Ifをいれてみたのですが、こんどはまったく
入力を受け付けなくなってしまいました。
いったい、どうすればいいのでしょうか・・・  OTL

編集 削除
コボル  2005-10-17 15:31:13  No: 126324  IP: [192.*.*.*]

参考になれば。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200305/03050060.txt

編集 削除
もげ  2005-10-17 15:38:04  No: 126325  IP: [192.*.*.*]

こっちのほうがよくないかな。

Private Sub Text1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
        Case vbKey0
            KeyAscii = vbKeyA
            '中略
        Case vbKey9
            KeyAscii = vbKeyJ
        Case Else
            KeyAscii = 0
    End Select
End Sub

編集 削除
もげ  2005-10-17 15:40:40  No: 126326  IP: [192.*.*.*]

あ、逆?  Aを押したら0なのか。

Private Sub Text1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
        Case vbKeyA
            KeyAscii = vbKey0
            '中略
        Case vbKeyJ
            KeyAscii = vbKey9
        Case Else
            KeyAscii = 0
    End Select
End Sub

編集 削除
homework  2005-10-17 15:41:56  No: 126327  IP: [192.*.*.*]

VB初心者さんのソースを生かすとこうなるかな?
フォームにテキストボックスを2個配置して以下のコードを実行してみてください。
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Text1.Text = ""
    Select Case KeyAscii
        Case 48
            Text2.Text = "A"
        Case 49
            Text2.Text = "B"
        Case 50
            Text2.Text = "C"
        Case 51
            Text2.Text = "D"
        Case 52
            Text2.Text = "E"
        Case 53
            Text2.Text = "F"
        Case 54
            Text2.Text = "G"
        Case 55
            Text2.Text = "H"
        Case 56
            Text2.Text = "I"
        Case 57
            Text2.Text = "J"
        Case Else
            Text2.Text = ""
    End Select
End Sub
求めている事とは少し違うかもしれませんが、処理的にはこういうことでしょうか?

編集 削除
GOD  2005-10-17 15:47:52  No: 126328  IP: [192.*.*.*]

入力文字と変換文字ってどうなっているんだろう。
文章で書かれていることと例で書かれていることが合ってない。
一応↓みたいな感じかな。
足りない部分については補足してね。

Private Sub Text1_KeyPress(KeyAscii As Integer)
    Dim intKey As Integer

    '小文字で入力されても大文字として処理する。
    intKey = Asc(UCase(Chr(KeyAscii)))
    Select Case intKey
    Case vbKeyA To vbKeyJ
        KeyAscii = vbKey0 + intKey - vbKeyA
    Case vbKeyBack
    Case Else
        KeyAscii = 0
    End Select
End Sub

編集 削除
VB初心者  2005-10-17 15:52:10  No: 126329  IP: [192.*.*.*]

もげさん、ありがとうございます。うまくいきました!
ただ、今回の場合は
        Case vbKey0
            KeyAscii = vbKeyA
ではなく、逆パターンの
        Case vbKeyA
            KeyAscii = vbKey0
でしたが、かなり参考になりました。
あとひとつ、わからないことがあるのですが、
Backspaceを使えるようにしたいのですが、
どうすればよいでしょうか?お願いします。

編集 削除
もげ  2005-10-17 15:53:10  No: 126330  IP: [192.*.*.*]

まあ、こうかな...
Private Sub Text1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
        Case vbKeyA To vbKeyJ
            KeyAscii = KeyAscii - 17
        Case vbKeyBack, vbKeyDelete
            KeyAscii = KeyAscii
        Case Else
            KeyAscii = 0
    End Select
End Sub

編集 削除
あんび  2005-10-17 15:58:04  No: 126331  IP: [192.*.*.*]

Private Sub Form_KeyPress(KeyAscii As Integer)
    MsgBox KeyAscii
End Sub

このコードで実行してBackSpaceキーを押してみてください。
あとは、MSDN(ヘルプね)から
  キー コード定数
で検索して眺めてから、いままで教えていただいたロジックとあわせて
考えてみてください。

編集 削除
VB初心者  2005-10-17 16:00:54  No: 126332  IP: [192.*.*.*]

ありがとうございます。うまくいきました。
あと、これで最後ですが、
A〜J、Backspace、Delete、Tab、矢印キー以外のキーボードからの
入力をうけつけないようにしたいのですが、どうすればいいでしょうか?
お願いします。

編集 削除
座布団  2005-10-17 16:07:22  No: 126333  IP: [192.*.*.*]

>Case Else
>    KeyAscii = 0

ん?
この部分が該当するとこかと。
SelectCaseでどれにも該当しなかった場合の処理がCaseElseなので。

編集 削除
VB初心者  2005-10-17 16:09:58  No: 126334  IP: [192.*.*.*]

ありがとうございます。やっと解決いたしました。
また、わからないことがあったときにはお世話になるとおもいますので、
そのときにはよろしくおねがいします

編集 削除