VB6.0のプログラムで足りない部分があると言われて困っています

このQ&Aのポイント
  • VB6.0のプログラムで足りない部分があると言われて困っています。プログラム作成中で困っている方は、教えてください。
  • VB6.0のプログラムで足りない部分があります。具体的に教えていただけると助かります。
  • VB6.0のプログラムで問題が発生しています。足りない部分についてアドバイスが欲しいです。
回答を見る
  • ベストアンサー

vb6.0のプログラム

今こんなプログラムを作っているのですがなぜか、足りない部分があると言われて困っております。 できれば教えてください。 図 ーーーーーーーーーーーーーーーー from ーーーーーーーーーーーーーーーー 残り30秒[ーーーーラベルーーーー] 000+000=000←(3つともlabel) □-------------------□←HScrollbar max100 min0 [コマンドボタン] [タイマー]←非表示 ーーーーーーーーーーーーーーーー コード Private intCount As Integer Private intSecond As Integer Private Sub cmdStart_Click() Dim intNum1 As Integer Dim intNum2 As Integer If cmdStart.Caption = "Start" Then intCount = 0 intSecond = 30 lblResult.Caption = "" cmdStart.Caption = "OK" tmrSecond.Enabled = True ElseIf cmdStart.Caption = "OK" Then If CInt(lblAnswer.Caption) = CInt(lblNum1.Caption) + CInt(lblNum2.Caption) Then lblResult.Caption = lblResult.Caption & "○" intCount = intCount + 1 Else lblResult.Caption = lblResult.Caption & "×" End If intNum1 = Rnd() * 50 intNum2 = Rnd() * 50 lblNum1.Caption = intNum1 lblNum2.Caption = intNum2 End If End Sub Private Sub hsbAnswer_Change() lblAnswer.Caption = hsbAnswer.Value End Sub Private Sub tmrSecond_Timer() intSecond = intSecond - 1 lblTime.Caption = "残り" & intSecond & "秒" If intSecond = 0 Then tmrSecond.Enabled = False MsgBox (intCount & "問正解") cmdStart.Caption = "Start" Else End If End Sub どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

#3です。 修正箇所としては・・・ 1.lblAnswer を TEXTBOX にしてtxtAnswer 等にしま   しょう。 2.intNum1 = Rnd() * 50 の前に call Randomize で   乱数を初期化させましょう。 3.intNum1 = Rnd() * 50 ではなく、   intNum1 = int(50 * Rnd + 1) にしましょう 4.○×の採点の後にtxtAnswer = "" としてクリア   しましょう。 5.○×の採点の時にプログレスバーを操作しましょう このくらいでしょうか・・・

imarusu
質問者

お礼

ありがとうございます! これで何とか進めそうです。

その他の回答 (4)

回答No.4

#3です。 続けて、cmdStartで答え合わせした後クリアされないから前回の答えが残ったままになる。 問題をRnd()で生成する前にRandomize関数を使っていないから一発目の問題がいつも同じ数字になる。 #3でも言ったが回答の入力場所がない。 プログレスバーは何も変化しない。 以上、気になった点です

imarusu
質問者

お礼

すいませんでした; 自分もまだVBのことがよく分からないので詳しくはいえません;

回答No.3

どこに答えを入力するんでしょうか? また、初回起動だとlblNum1とlblNum2に数値が入らないのでは?

imarusu
質問者

補足

2回目から入るようになってるんですが; intNum1 = Rnd() * 50ってところです。

noname#22222
noname#22222
回答No.2

表示が変更されないままに、ただただ、30秒が過ぎて終了するのでは・・・。 そこで、何かが足りないと言われているのでは?

imarusu
質問者

補足

表示はスクロールバーの位置をずらせば数字をかえられます。

回答No.1

それぞれのラベルの名前、コマンドボタンの名前が標記されていないので解読が非常に面倒臭いです。 どのラベルがlblAnswer?どのラベルがlblResult?などなど・・・。 ざっと見た所、30秒以内に出来るだけ足算に答えて行くというプログラムのようですが、よろしいでしょうか? 私の見た限りハイスコアを計算している所が見当たりませんが?大体HScrollbarとはプログレスバーの事なんでしょうか?

imarusu
質問者

補足

>HScrollbarとはプログレスバーの事なんでしょうか? そうです。 後、言い忘れていた所を書きますね。 000+000=000 最初の000はlblNum1 +がlblPlus 次の000はlblNum2 =がlblEqual 次の000はlblAnswerです。 「残り30秒」のところがlblTime その隣のラベルはlblResult Hscrollbarの方はhsbAnswer コマンドボタンがcmdStart タイマーがtmrSecond です。

関連するQ&A

  • VB6コントロール配列をパラメータとして渡す方法

    フォーム上にcmdStartというコマンドボタンが3個あります。それをクリックすると使用不可になるというプロシージャーですが、(1)のイベントに対して、(2)で処理する場合、下のようにやると、型がちがうといってエラーになります。 この場合、コントロールの配列を次のモジュールに渡すにはどのように書いたらいいのでしょうか? (1) Private Sub cmdStart_Click(Index As Integer) processGet cmdStart() End Sub (2) Public Sub processGet(pcmdStart() As Control) Dim i As Integer For i = 0 to 2 pcmdStart(i).Enabled=False Next i End Sub

  • 途中でエラーが出てしまい手が止まってしまいました(T_T)

    Visual Basicについてなんですが、いいですか? http://azsx00.tripod.co.jp/D001.jpg 初心者じみた質問ですみません。 上記の画像ののようなプログラムが途中までで引っかかってしまって先に進めません。 どなたかご指導下さい。 一応自分で考えた結果です。どこが悪いとか何が分かってないとかいろいろアドバイスもあればお願いします。まだ習い始めたばかりです。 Dim Number As Integer Dim Score As Integer Dim MessageText As String Private Sub Command1_Click() If Number > 7 Then Score = Score + 1 MessageText "あたり" End If If Number < 7 Then Score = Score - 1 MessageText "外れ" End If If Number = 7 Then Score = Score + 0 MessageText "引き分け" End If End Sub Private Sub Command2_Click() If Number > 7 Then Score = Score + 1 MessageText "あたり" End If If Number < 7 Then Score = Score - 1 MessageText "外れ" End If If Number = 7 Then Score = Score + 0 MessageText "引き分け" End If End Sub Private Sub Form_Load() Number = Rnd() * 13 + 1 Score = 0 Label1.Caption = "?" Text1.Text = "Score:" & Score End Sub Private Sub Label1_Click() If Number > 7 Then Label1.Caption = "Score" End If If Number < 7 Then Label1.Caption = "Score" End If End Sub

  • VB6でスロットを作成したい

    VB6歴2ヶ月の初心者です。 フォーム上に ラベルコントロールが三つ コマンドボタンが二つ タイマーコントロールが一つ あります。 タイマーのプロパティは Enabled False Interval 10 です。 スロットを作成したいのですが、 ボタン1を一回押すごとに左からスロットが回り、 最後にボタン2で動きを止めたいのです。 一応自分でも書いてみたのですが、ここで行き詰まりました。 ウワァァァァァァヽ(`Д´)ノァァァァァァン! Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False End Sub Private Sub Timer1_Timer() Dim slot As Integer slot = Int(Rnd(1) * 9 + 1) Label1.Caption = slot End Sub 思い通りに動かすにはどんなコードにしたらいいですか?

  • VB6 Form内のDragDrop

    VB6でForm内にCommandButtonがいくつか有ります。 各CommandButtonはClickするとShellオブジェクトでファイルを開く様になっています。 やりたいことは 2つのCommandButton間をDragDrop?によりCaptionを入れ替えたいです。 (CommandButton間をマウスDragDropでCaption名入れ替え) MouseDownとDragDropイベントで何とかなると思いましたがうまくいきません。 Dim dd As Integer Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then dd = 1 'CommandボタンNo, End If End Sub Private Sub Command2_DragDrop(Source As Control, X As Single, Y As Single) Dim cn As String cn = Command2.Caption Command2.Caption = Controls("Command" & dd).Caption Controls("Command" & dd).Caption = cn End Sub CommandButtonプロパティでDragModeを自動にするとShellオブジェクトでファイルが開かないし サイトで調べたところファイルの移動やコマンド自体の移動などで分かりませんでした。 ご教授お願い致します。

  • PICNICのVB制御プログラム

    お世話になります。 VBでPICNICボード(トライステート社製http://www.tristate.ne.jp/)の制御ソフトを作っているのですがコンパイルエラーがでて、プログラムの実行ができません。(VB初心者です) (1)接点入力、アナログデータは取り込みできます。 (2)パラレルポートのピン方向制御はできます。 (3)パラレルポートのピン方向状態は読み込みできます。 (4)接点出力(I/O pinのLow,High)制御、液晶制御、RS232送信制御ができません。 問題ありソース Dim retvalue As Variant Dim n, m As Integer Dim nameb As String Dim rez As Integer Dim status(0 To 3) As Boolean Dim current As Integer Dim data(100000) As Integer Dim datab(100000) As Boolean Private Sub Command1_Click() data(current) = PICOCX1.ADinp(PortA, 4) Label1.Caption = "温度:" & Format(data(current) / 10.23 * 5, "#0.0℃") retvalue = PICOCX1.Dirp(PortB, 4, pinOutput) End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Timer1_Timer() Call check End Sub Private Sub check() n = 0 m = 0 nameb = "tanaka" data(current) = PICOCX1.ADinp(PortA, 0) Label2.Caption = "温度:" & Format(data(current) / 102.3 * 5, "#0.0℃") data(current) = PICOCX1.ADinp(PortA, 1) Label3.Caption = "湿度1:" & Format(data(current) / 10.23 * 5, "#0.0%") data(current) = PICOCX1.ADinp(PortA, 2) Label4.Caption = "湿度2:" & Format(data(current) / 10.23 * 5, "#0.0%") data(current) = PICOCX1.ADinp(PortA, 3) Label5.Caption = "空き:" & Format(data(current) / 10.23 * 5, "#0.0") data(current) = PICOCX1.ADinp(PortA, 5) Label6.Caption = "温度:" & Format(data(current) / 10.23 * 5, "#0.0℃") 'ポートRA5の値 基板側のミス? data(current) = PICOCX1.ADinp(PortA, 4) Label1.Caption = "温度:" & Format(data(current) / 10.23 * 5, "#0.0℃") ' 文法テスト datab(10000) = PICOCX1.ADinp(PortA, 4) '接点入力状態 status(0) = PICOCX1.Inp(PortB, 0) If status(0) = True Then Label7(0).Caption = "扉閉状態" Else Label7(0).Caption = "扉開状態" End If status(1) = PICOCX1.Inp(PortB, 1) If status(1) = True Then Label7(1).Caption = "扉施錠状態" Else Label7(1).Caption = "扉解除状態" End If status(2) = PICOCX1.Inp(PortB, 2) If status(2) = True Then Label7(2).Caption = "  " Else Label7(2).Caption = "人検知" End If status(3) = PICOCX1.Inp(PortB, 3) If status(3) = True Then Label7(3).Caption = "High" Else Label7(3).Caption = "Low" End If 'パラレルポート入出力状態 retvalue = PICOCX1.GetDirp(PortB, 4) 'パラレルポート入出力方向制御 'retvalue = PICOCX1.Dirp(PortB, 4, pinInput) ' retvalue = PICOCX1.Dirp(PortB, 4, pinOutput) '接点出力制御 'data(current) = PICOCX1.Outp(PortB, 4, High) 'void = PICOCX1.Outp(PortB, 4, High) 'retvalue = PICOCX1.Outp(PortB, 4, 0) retvalue = PICOCX1.Outp(PortB, 4, High) '液晶の制御 ' retvalue = PICOCX1.LcdClear これはサポートされていなとのメッセージ 'retvalue = PICOCX1.ClearLcd '型の不一致エラー ' retvalue = PICOCX1.PutLcd(n, m, nameb) 'retvalue = PICOCX1.SetPos(n, m) 'retvalue = PICOCX1.PutLcd(n, m, nameb) 'シリアルI/F制御 'retvalue = PICOCX1.Transmit(nameb) retvalue = PICOCX1.Receive '文法エラーでなく誰かがすでに使用しているとのメッセージ End Sub エラー内容及び疑問 (1) 接点出力制御 retvalue = PICOCX1.Outp(PortB, 4, High)   コンパイルエラー 型が一致しません。 とのエラーがでます。基本的文法ミスですか? retvalue を全種10種に型に変更しても変わりません。 (2) retvalue = PICOCX1.Outp(PortB, ・・とエディターで入力時、ADinp命令入力時みたいに入力支援メニュで型宣言がありません。型指定不要ですか? 以上 初歩的質問ですが、悩んでおります。 お忙しいところ申し訳ありませんが誰か教えてください。

  • VBA DoEvents関数の働きと使い方を知りたい

    下記のような UserForm上の Module コードを書いてももらったのですが、DoEvents の働きが分からないのです。どなたか分かりやすく説明していただけませんでしょうか? Private i As Integer Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.TextBox1.Value = Me.Label1.Caption Then Me.Label2.Caption = "正解です" Else Me.Label2.Caption = "不正解です" End If DoEvents If i < 20 Then i = i + 1 Label_Up Me.TextBox1.Value = "" Cancel = True Else MsgBox "終了です" End If End Sub Private Sub UserForm_Initialize() i = 1 Label_Up End Sub Private Sub Label_Up() Me.Label1.Caption = Sheets("Sheet1").Range("A1:A20").Cells(i).Value DoEvents End Sub

  • シリアル通信:オフライン時にうまく終了してくれません

    シリアルプリンタの制御をVB6で行っております。 以下のようなコードですが、うまく終了してくれません。 'グローバル 'プリンタの状態 Dim BUF as String '起動時 Private Sub Form_Load() MSComm1.PortOpen = True Text1.Text = "" Timer1.Enabled = True End Sub '終了 Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False MSComm1.PortOpen = False End Sub 'タイマー Private Sub Timer1_Timer() Timer1.Enabled = False Call CheckPrint Timer1.Enabled = True End Sub Private Sub MSComm1_OnComm() Dim TimeOut As Long Dim sTime As Long Dim eTime As Long Select Case MSComm1.CommEvent '受信 Case comEvReceive TimeOut = 100 sTime = timeGetTime Do If (TimeOut - eTime) < 0 Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until MSComm1.InBufferCount >= 82 BUF = MSComm1.Input End Select End Sub プリンタの状態チェック Private Sub CheckPrint() Dim sTime As Long Dim eTime As Long Dim TimeOut As Long Dim i As Integer Dim n As Integer BUF = "" 'プリンタの情報取得コマンド MSComm1.Output = "~HS" 'タイマ開始 TimeOut = 400 sTime = timeGetTime eTime = 0 Do DoEvents If BUF <> "" Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until TimeOut - eTime < 0 If BUF <> "" Then ... .. 宜しくお願いします。

  • VBプログラム エラーが出ます

    Public Class Form1 Private number As Integer Private rows As Integer Private columns As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Not Integer.TryParse(TextBox1.Text, rows) OrElse _ Not Integer.TryParse(TextBox2.Text, columns) OrElse _ Not Integer.TryParse(TextBox3.Text, number) Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If Me.Bounds = New Rectangle(10, 10, 1300, 800) Dim cnt As Integer = 0 For k As Integer = 1 To number For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 tb.Name = "tb" + cnt.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 30 + 80 tb.Left = (j - 1) * 60 + 70 * (columns * (k - 1)) + 10 tb.Width = 50 Next Next Next End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sum As Double Dim cnt As Integer = 0 For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 : If cnt > rows * columns Then cnt = 1 tb.Name = "tbA" + cnt.ToString Me.Controls.Add(tb) tb.Top = (i - 1) * 30 + (80 + 40 * rows) tb.Left = (j - 1) * 60 + 10 tb.Width = 40 sum = 0 For k As Integer = 1 To number sum += Double.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * k-1))).ToString(), TextBox).Text)    エラー Next tb.Text = sum.ToString() Next Next End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Do Until Me.Controls.Count <= 6 For Each tbD As Object In Me.Controls If CType(tbD, Control).Name Like "tb*" Then Me.Controls. Remove(tbD) Next Loop End Sub End Class エラーと書いている箇所 どう直したらよいのでしょうか。 縮小変換しないで呼び出されるアクセス可能なitemがないためオーバーロードの解決に失敗しました と出ます。 あとwindowsの画面の大きさを入力される値が小さければ少し小さいwindowsになるように変えたいのですがどうしたよいのでしょう。

  • vb コンボボックスのイベントについて

    こんばんわ。 コンボボックスで、 指定の値をマウス操作でクリックしたときと、 キーボードの上下で、移動後returnを押したときだけ、 MsgBox "処理実行" を実行したいです。 keystateを使ってみたのですが、前の情報が残っているのかうまくいきません。keystateの情報をクリアさせるか、シンプルに上記を動作させる何かよい方法はありますでしょうか。 Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Dim flg1 As Boolean Private Sub form_load() Combo1.AddItem (11) Combo1.AddItem (22) Combo1.AddItem (33) Combo1.AddItem (44) End Sub Private Sub Combo1_Keyup(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then 'return flg1 = True Call Combo1_click End If End Sub Private Sub Combo1_click() If (GetKeyState(&H26) <> 0) Or (GetKeyState(&H28) <> 0) Then ' ↑↓ If flg1 = False Then Exit Sub End If End If MsgBox "処理実行" flg1 = False End Sub

  • 画像のランダム表示

    初心者なのですがVisual Studio6.0でもぐらたたきゲームを利用した作品を現在制作しています。内容は決まった画像がランダムでImageコントロールに表示され、それをクリックできると画像が変わり得点加算、クリックできないと画像が変わり減点というゲームです。現在Imageコントロールに決まった画像を呼び出す処理が完成しました。そして追加機能としてクリックできたらボーナスポイントの画像をImageコントロールに何分の何かの確率で表示させたいのですがわからない状態です。ちなみに画像は私のパソコンのDドライブから呼び出して表示させています。 どういった命令文を打ったら良いのかわかる方教えて下さい。宜しくお願いします。 こちらがプログラムです。 Option Explicit Const MinImgAry = 0 Const MaxImgAry = 15 Const GameTime = 15 Dim HitFlg As Integer Dim TEN As Integer Dim HoleNum As Integer Dim IconAry(2) As String Private Sub Command1_Click() Command1.Enabled = False Option1.Enabled = False Option2.Enabled = False Option3.Enabled = False HitFlg = 0 TEN = 0 Text1.Text = Str(TEN) Timer1.Enabled = True Timer2.Enabled = True End Sub Private Sub Command2_Click() Form1.Show End Sub Private Sub Form_Load() Dim StrPath As String StrPath = App.Path If Right(StrPath, 1) <> "\" Then StrPath = StrPath + "\" End If IconAry(0) = "D:制作\5\画像1.bmp" IconAry(1) = "D:制作\5\画像2.bmp" IconAry(2) = "D:制作\5\画像3.bmp" End Sub Private Sub Image1_Click(Index As Integer) Image1(Index).Enabled = False HitFlg = -1 End Sub Private Sub Option1_Click() Timer1.Interval = 1000 End Sub Private Sub Option2_Click() Timer1.Interval = 800 End Sub Private Sub Option3_Click() Timer1.Interval = 500 End Sub Private Sub Timer1_Timer() Static CtlFlg As Integer Select Case CtlFlg Case 0 Image1(HoleNum).Enabled = False Image1(HoleNum).Visible = False HoleNum = Int((MaxImgAry - _ MinImgAry + 1) * Rnd + MinImgAry) Image1(HoleNum).Picture = _ LoadPicture(IconAry(0)) CtlFlg = 1 Image1(HoleNum).Visible = True Image1(HoleNum).Enabled = True Exit Sub Case 1 Image1(HoleNum).Enabled = False If HitFlg Then HitFlg = 0 Image1(HoleNum).Picture = _ LoadPicture(IconAry(2)) TEN = TEN + 1 Text1.Text = Str(TEN) Else Image1(HoleNum).Picture = _ LoadPicture(IconAry(1)) TEN = TEN - 1 Text1.Text = Str(TEN) End If CtlFlg = 0 Exit Sub End Select End Sub Private Sub Timer2_Timer() Static TimeCnt As Long TimeCnt = TimeCnt + 1 If TimeCnt <> GameTime Then Exit Sub End If Timer1.Enabled = False Timer2.Enabled = False MsgBox "おしまい" TimeCnt = 0 Command1.Enabled = True Image1(HoleNum).Enabled = False Image1(HoleNum).Visible = False Option1.Enabled = True Option2.Enabled = True Option3.Enabled = True End Sub

専門家に質問してみよう