プロが教えるわが家の防犯対策術!

A、B、C、D、E、Fの6枚の画像を用意して
ボタンを押すごとにA、B、Cの3枚の画像をランダムに表示させる方法を教えて下さい。

また、
Aが表示されたとき、キーボードの「A」を押すとDを表示
Bが表示されたとき、キーボードの「B」を押すとEを表示
Cが表示されたとき、キーボードの「C」を押すとFを表示
としたいのですが・・・。

どなたかご教授お願いします。

A 回答 (4件)

#1です。

訂正版です。
前準備として、
 1.フォーム上にピクチャーボックス(Picture1)、コマンドボタン(Command1)を配置。
 2.フォームのKeyPreviewプロパティをTrueにする。(KeyPressイベントを他のコントロールより先に受け取るため。)
次にフォームモジュールに以下のように記述することでできました。

Dim strABC As String '(フォーム)モジュールレベルの変数

Private Sub Command1_Click()
  Dim intRND As Integer

  Randomize '乱数発生ルーチンを初期化

  intRND = Int(3 * Rnd + 1) '1~3の間で乱数を発生

  'intRND(1~3の整数)の値からA,B,Cの画像を表示。strABCにどの画像を表示したか設定。
  Select Case intRND
    Case 1
      Picture1.Picture = LoadPicture("C:\A.BMP")
      strABC = "A"
    Case 2
      Picture1.Picture = LoadPicture("C:\B.BMP")
      strABC = "B"
    Case 3
      Picture1.Picture = LoadPicture("C:\C.BMP")
      strABC = "C"
  End Select
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
  If UCase(Chr(KeyAscii)) = "A" And strABC = "A" Then
    Picture1.Picture = LoadPicture("C:\D.BMP")
  ElseIf UCase(Chr(KeyAscii)) = "B" And strABC = "B" Then
    Picture1.Picture = LoadPicture("C:\E.BMP")
  ElseIf UCase(Chr(KeyAscii)) = "C" And strABC = "C" Then
    Picture1.Picture = LoadPicture("C:\F.BMP")
  End If
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
訂正版ありがとうございました。
また、KeyPreviewプロパティについても教えて頂きありがとうございました。

お礼日時:2006/09/27 16:04

rnd関数を使えば簡単にできます。



rnd関数は乱数を発生させる関数です。
int(rnd(1)*3)+1
とすれば整数1~3の乱数が返されます。これは乱数の基本的な使い方です。

後は仕様がよく分からないので適当に補正して下さい。
なお、VBの乱数は精度があまりよくないことが知られているので、
発展としてseedを研究されるとより知識が深まるでしょう。

>Aが表示されたとき、キーボードの「A」を押すとDを表示

キー操作にはkeypress、keydown、keyupの3つのイベントがあり、
この場合はふつうにkeypressに記述すればいいかと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
「seed」ですね。ありがとうございます。
早速、調べてみます。

お礼日時:2006/09/27 16:00

#1です。

勘違いしてました。
A,B,Cをランダムに表示させた後に、押したキーによって画像を切り替えるということだったのですね。
私の回答だと、ランダム表示とA,B,Cのどの画像が表示されているかの判定部分が入っていませんね。
すみません。読み飛ばしてください。
    • good
    • 0

質問文だとランダムではなく規則性があるように思えるのですが、


フォームにピクチャーボックス(Picture1)を配置して、フォームのKeyPressイベントに
下記のコードを記述すれば出来ると思いますが。
(画像D,E,FはCドライブの直下にあるBMPファイルと仮定して。)
Private Sub Form_KeyPress(KeyAscii As Integer)
  If KeyAscii = Asc("A") Then
    Picture1.Picture = LoadPicture("C:\D.bmp")
  ElseIf KeyAscii = Asc("B") Then
    Picture1.Picture = LoadPicture("C:\E.bmp")
  ElseIf KeyAscii = Asc("C") Then
    Picture1.Picture = LoadPicture("C:\F.bmp")
  End If
End Sub
※行頭には位置揃えのため全角スペースが入っています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!