- ベストアンサー
画像をランダムに表示させたい(VB6.0)
A、B、C、D、E、Fの6枚の画像を用意して ボタンを押すごとにA、B、Cの3枚の画像をランダムに表示させる方法を教えて下さい。 また、 Aが表示されたとき、キーボードの「A」を押すとDを表示 Bが表示されたとき、キーボードの「B」を押すとEを表示 Cが表示されたとき、キーボードの「C」を押すとFを表示 としたいのですが・・・。 どなたかご教授お願いします。
- みんなの回答 (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
その他の回答 (3)
- gungnir7
- ベストアンサー率43% (1124/2579)
rnd関数を使えば簡単にできます。 rnd関数は乱数を発生させる関数です。 int(rnd(1)*3)+1 とすれば整数1~3の乱数が返されます。これは乱数の基本的な使い方です。 後は仕様がよく分からないので適当に補正して下さい。 なお、VBの乱数は精度があまりよくないことが知られているので、 発展としてseedを研究されるとより知識が深まるでしょう。 >Aが表示されたとき、キーボードの「A」を押すとDを表示 キー操作にはkeypress、keydown、keyupの3つのイベントがあり、 この場合はふつうにkeypressに記述すればいいかと思います。
お礼
回答ありがとうございます! 「seed」ですね。ありがとうございます。 早速、調べてみます。
- kabilunlun
- ベストアンサー率34% (155/446)
#1です。勘違いしてました。 A,B,Cをランダムに表示させた後に、押したキーによって画像を切り替えるということだったのですね。 私の回答だと、ランダム表示とA,B,Cのどの画像が表示されているかの判定部分が入っていませんね。 すみません。読み飛ばしてください。
- kabilunlun
- ベストアンサー率34% (155/446)
質問文だとランダムではなく規則性があるように思えるのですが、 フォームにピクチャーボックス(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 ※行頭には位置揃えのため全角スペースが入っています。
お礼
回答ありがとうございます! 訂正版ありがとうございました。 また、KeyPreviewプロパティについても教えて頂きありがとうございました。