要件
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 イベントを使用する。
もう少し、お願いしますとかないの?
自分の用件だけ書いてて、読んでて気分悪い
質問だけ入力してしまい、すいませんでした。
わたくし、つい最近にVBをはじめたばかりでして、
かなり初歩的なことだとは思うのですが、この掲示板なら
解決していただけると思い、書き込みいたしました。
よろしくお願いします。
ちょっと面白い。
>4.終了ボタンを押下すると、画面を閉じる。
KeyPress イベントの引数(keyascii)を
Chr(KeyAscii)で文字列へ変換してみてください。
あとは条件分岐で必要なKeyのみ処理をする。
SelectCase分を使用するって、なんだか学校の宿題みたいですね。
どこからどこまでを解決すればいいのか分かりませんが、
とりあえず、KeyPressイベントを作って、
その中にSelectCase文を置いてみては?
ありがとうございます。
座布団さんのおっしゃるとおり、自分でやってみて、KeyPressイベントとSelectCase文を
使うということまではわかったのですが、そこから先がうまくいきません。
『Select Case に対応する Case がありません。』というコンパイルエラーが出て、そこから進みません・・・。
実は先週から始めたばかりですので用語などがほとんどわからないまま
やっております。
下に現状のソースコードを記入しておきます。
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
>『Select Case に対応する Case がありません。』というコンパイルエラーが出て、そこから進みません・・・。
読んで字のごとくだと思いますが・・・
Select Case 変数
Case 値1
・・・
Case 値2
・・・
Case Else
・・・
End Select
のような形になってますか?
うわ。かぶったorz
VB初心者のコードで気になることは
Case0からCase8のIf文に「End If」の記述がないことですかね〜
ありがとうございます。
homeworkさんのおっしゃるとおり、
Case0からCase8のIf文にEnd Ifをいれてみたのですが、こんどはまったく
入力を受け付けなくなってしまいました。
いったい、どうすればいいのでしょうか・・・ OTL
参考になれば。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200305/03050060.txt
こっちのほうがよくないかな。
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
あ、逆? 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
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
求めている事とは少し違うかもしれませんが、処理的にはこういうことでしょうか?
入力文字と変換文字ってどうなっているんだろう。
文章で書かれていることと例で書かれていることが合ってない。
一応↓みたいな感じかな。
足りない部分については補足してね。
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
もげさん、ありがとうございます。うまくいきました!
ただ、今回の場合は
Case vbKey0
KeyAscii = vbKeyA
ではなく、逆パターンの
Case vbKeyA
KeyAscii = vbKey0
でしたが、かなり参考になりました。
あとひとつ、わからないことがあるのですが、
Backspaceを使えるようにしたいのですが、
どうすればよいでしょうか?お願いします。
まあ、こうかな...
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
Private Sub Form_KeyPress(KeyAscii As Integer)
MsgBox KeyAscii
End Sub
このコードで実行してBackSpaceキーを押してみてください。
あとは、MSDN(ヘルプね)から
キー コード定数
で検索して眺めてから、いままで教えていただいたロジックとあわせて
考えてみてください。
ありがとうございます。うまくいきました。
あと、これで最後ですが、
A〜J、Backspace、Delete、Tab、矢印キー以外のキーボードからの
入力をうけつけないようにしたいのですが、どうすればいいでしょうか?
お願いします。
>Case Else
> KeyAscii = 0
ん?
この部分が該当するとこかと。
SelectCaseでどれにも該当しなかった場合の処理がCaseElseなので。
ありがとうございます。やっと解決いたしました。
また、わからないことがあったときにはお世話になるとおもいますので、
そのときにはよろしくおねがいします