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

解決


VB初心者  2005-10-17 22:49:27  No: 126314

要件
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 23:29:59  No: 126315

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


VB初心者  2005-10-17 23:37:36  No: 126316

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


コボル  2005-10-17 23:44:12  No: 126317

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

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


座布団  2005-10-17 23:50:02  No: 126318

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

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


VB初心者  2005-10-18 00:04:57  No: 126319

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


VB初心者  2005-10-18 00:11:56  No: 126320

実は先週から始めたばかりですので用語などがほとんどわからないまま
やっております。
下に現状のソースコードを記入しておきます。
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-18 00:13:33  No: 126321

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


homework  2005-10-18 00:16:41  No: 126322

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


VB初心者  2005-10-18 00:29:50  No: 126323

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


コボル  2005-10-18 00:31:13  No: 126324

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


もげ  2005-10-18 00:38:04  No: 126325

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

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-18 00:40:40  No: 126326

あ、逆?  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-18 00:41:56  No: 126327

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-18 00:47:52  No: 126328

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

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-18 00:52:10  No: 126329

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


もげ  2005-10-18 00:53:10  No: 126330

まあ、こうかな...
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-18 00:58:04  No: 126331

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

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


VB初心者  2005-10-18 01:00:54  No: 126332

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


座布団  2005-10-18 01:07:22  No: 126333

>Case Else
>    KeyAscii = 0

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


VB初心者  2005-10-18 01:09:58  No: 126334

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加