VB 6.0でtimerをとselect caseを使ったプログラムの続きで質問です

このQ&Aのポイント
  • VB 6.0でtimerを使ったプログラムの続きで、信号機の表示にあわせてイメージを動かしたいのですが、初期位置にイメージを戻すことができません。
  • Timer2.Tagの値によって処理を分岐させて、イメージの位置を変更していますが、指定の範囲では初期位置にイメージを戻すようになっているはずなのに、動き続けてしまいます。
  • 初期位置にイメージを戻すためのコードの修正方法を教えていただきたいです。
回答を見る
  • ベストアンサー

VB 6.0でtimerをとselect caseを使ったプログラムの続きで質問です。

http://oshiete1.goo.ne.jp/qa3135998.html ↑前の質問 質問ばかりですいません 今度は信号機の表示にあわせてイメージを動かしたいのですが、 Private Sub Timer2_Timer() Timer2.Tag = CStr(Val(Timer2.Tag) + 1) x = -500 y = 300 Select Case Timer2.Tag Case "6" To "11" ←の間は初期位置にイメージを戻したい Image1.Left = 7560 Image1.Top = 3000 Case Else Image1.Left = Image1.Left + x Image1.Top = Image1.Top + y Timer2.Tag = "0" End Select と入力してもまったく初期位置に戻らなく、移動を続けてしまいます 。何度もしつこくてすいませんが、誰か詳しい方お願いします

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Timer2.Tagがどのような値になるか考えて見ましょう デザイン時に Tagに何も設定されてないのであれば 最初の実行文で "0"が代入されます となると Case "6" to "11" の条件に合いませんので Case Else節が実行されます このElse節の最後で "0"を代入してしまっているので 次回にも "1"なので"6"と"11"の条件に合わないためElse節しか実行されません よって修正するには Case "6" to "11"節の最後で Timer2.Tag="0" を実行 Else節の Timer2.Tag="0" は削除またはコメントアウトしましょう

NIRVAN
質問者

お礼

解決できました。ありがとうございました!

関連するQ&A

  • VB 6.0でtimerをとselect caseを使ったプログラムで質問です。

    また質問です。 VBであらかじめ書いてあった三つの円を信号機のように青は2.5秒、黄色は0.5秒、赤は3秒で青→黄→赤→青 …と三十秒間動かしたいのですが、caseの後ろには何をいれればいいかわからず Private Sub Timer1_Timer() Timer.Tag = Timer1.Tag + 0.5 progressbar1.Value = progressbar1.Value + 0.5 Select Case Timer1.Tag Case Shape5.FillColor = vbGreen Shape5.FillStyle = 0 Case Shape6.FillColor = vbYellow Shape6.FillStyle = 0 Case Shape7.FillColor = vbRed Shape7.FillStyle = 0 end select End Sub としたのですがまったく動きません。タイマーを設定したのに時間の表示もでません。あと、progressbarというのもでてこないんです。 どうかお詳しい方お願いします。 m(_ _)m

  • VB2008EEのSelect Case

    VB2008EEのSelect Case devilconanさんとのやりとりを締めてしまいましたが、 下記でdevilconanさんは動いているようですが、再度試してもこちらでは動きません。 しかし、別のPCのVB2008EEで試すことが出来たのですが、こちらでは動きました。 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged, RadioButton2.CheckedChanged Select Case sender.text Case "RadioButton1" aaa = "1" bbb = "" Case "RadioButton2" aaa = "" bbb = "2" End Select End Sub Elseを追加して、ラジオボタン1と2を交互にチェックすると、それぞれ「sssss」とMsgBoxが出ます。 別のPCだと下の記述で、「case1」「case2」が表示されました。 Select Case sender.text Case "RadioButton1" aaa = "1" bbb = "" MsgBox("case1") Case "RadioButton2" aaa = "" bbb = "2" MsgBox("case2") Case Else MsgBox("sssss") End Select 動いたPCも動かないPCもXPです。 同じファイルを開いているのですが、この違いは何でしょうか?  

  • VBA Select Caseについて

    エクセルVBAでLike演算子とSelectCase構文を組み合わせたいのですが、以下ではエラーになってしまいます。 どう修正すればいいのでしょうか? ABCを含む文字列、DEFを含む文字列、その他、についての処理の分岐方法です。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Value Case Like "*ABC*" `処理A Case Like "*DEF*" `処理B Case Else `処理C End Select End Sub

  • VBA  前回のの続きです。

    BMI指数を計算して表示させるプログラムが組みたいです。 Private Sub CommandButton1_Click() y = Val(Cells(1, 2).Value) x = Val(Cells(3, 2).Value) / Val(Cells(2, 2).Value) ^ 2 Cells(2, 5) = x MsgBox ("指数は「x」&vbCrLf&yさんはzです。") Select Case x Case "18<x" z = "やせぎみ" Case "19To25" z = "普通" Case "26To30" z = "太り気味" Case Else z = "危険" EndSelect End Sub と、入力しました。 ですが、メッセージボックスに思うように表示されません。 私は、 「指数は○○ 名前 さんは、 ○○(体型)です」 ってやりたいのですが・・・ メッセージボックス内での改行の仕方が知りたいです。 後、プログラムの間違いもあったら教えて下さい。 よろしくおねがいします。

  • Select Case の使い方について

    はじめて質問します。 Windows XP  Access2000 の環境で作業しています。 お客様より頂いたCSVデータをもとに商品を出荷する出荷指示書を作成しています。 これまでは全てのお客様(約500店舗)に毎日出荷が基本でしたが、都合により50店舗ほど 週2回の出荷になりました。 実際の作業現場へ指示書を回す際に指示書の所定の位置に Select Case 使ってテキストを出力したいのですが最初のページがうまくいきません。 最初のページに[該当曜日]、[店番]があってもテキストが表示されないのです。その後のページには 正常に出力されます。 初心者ゆえの乱文を容赦願いまして、何が原因なのかご指導いただけば幸いです。 Private Sub Report_Page() Select Case [店番] & "#" & Weekday(Date) Case "10121#2" テキスト66 = "水曜出荷"   Case "10121#3" テキスト66 = "水曜出荷" Case "10121#4" テキスト66 = "出荷なし" Case "10121#5" テキスト66 = "土曜出荷" Case "10121#6" テキスト66 = "土曜出荷" Case "10121#7" テキスト66 = "出荷なし" Case "52114#2" テキスト66 = "火曜出荷" Case "52114#3" テキスト66 = "火曜出荷" Case "52114#4" テキスト66 = "出荷なし" Case "52114#5" テキスト66 = "金曜出荷" Case "52114#6" テキスト66 ="出荷なし" Case "52114#7" テキスト66 = "出荷なし"      ・      ・      ・  このような曜日と地域(翌着、中1日着等)による処理が50件ほど続きます。      ・      ・     End Select

  • SELECT CASEについての質問です

    以前教えていただいたコードがあるのですが どうしても分からない部分があったので質問させていただきます Private Sub Sample77()   Dim rs As ADODB.Recordset   Dim rsUP As New ADODB.Recordset   Dim i As Integer   Dim iCount As Long   iCount = 0   rsUP.Source = "SELECT * FROM 個人T WHERE 登録番号 LIKE 'ZZZZ%' ORDER BY 登録番号;"   rsUP.Open , CurrentProject.Connection, adOpenKeyset, adLockOptimistic   Set rs = rsUP.Clone(adLockReadOnly)   While (Not rsUP.EOF)     iCount = iCount + 1     Debug.Print iCount & " 件目 " & rsUP("登録番号")     rs.Filter = "[連番] = 'XXXX" & rsUP("登録番号") & "'"     If (Not rs.EOF) Then       For i = 0 To rsUP.Fields.Count - 1         Select Case rsUP.Fields(i).Name         ☆           Case "登録番号", "連番"           ☆           Case Else                  ☆             rsUP.Fields(i).Value = rs.Fields(i).Value☆         End Select       Next       rsUP.Update     End If     rsUP.MoveNext   Wend   rs.Close   rsUP.Close   Set rs = Nothing End Sub ☆の部分の動作がどうしてもわかりません。 "登録番号"と"連番"以外のフィールドを別レコードへ移動できるのですが 調べてもCASEの後にはなにか条件に当てはまった場合の処理を書く必要があると思うのですが 今回のコードにはそれが無いように思えます。 ☆の部分の動作を教えていただけないでしょうか よろしくお願いします。

  • C# 簡単なシューティング 自機移動について

    かなりの初心者で困っています。 簡単なシューティングを作ろうとおもっています。 使用ソフトはVisualC#2005です。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //自機(右移動) private void button3_Click(object sender, EventArgs e) { if (timer1.Enabled == false) { timer2.Enabled = false; timer1.Enabled = true; } else { timer1.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; } } private void timer1_Tick(object sender, EventArgs e) { pictureBox1.Left = pictureBox1.Left + 2; } //自機(左) private void button4_Click(object sender, EventArgs e) { if (timer2.Enabled == false) { timer1.Enabled = false; timer2.Enabled = true; } else { timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; } } private void timer2_Tick(object sender, EventArgs e) { pictureBox1.Left = pictureBox1.Left - 2; } //自機(上) private void button1_Click(object sender, EventArgs e) { if (timer3.Enabled == false) { timer4.Enabled = false; timer3.Enabled = true; } else { timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = false; } } private void timer3_Tick(object sender, EventArgs e) { pictureBox1.Top = pictureBox1.Top - 2; } //自機(下) private void button2_Click(object sender, EventArgs e) { if (timer4.Enabled == false) { timer3.Enabled = false; timer4.Enabled = true; } else { timer1.Enabled = false; timer2.Enabled = false; timer4.Enabled = false; } } private void timer4_Tick(object sender, EventArgs e) { pictureBox1.Top = pictureBox1.Top + 2; } } } 自機は画像(PictureBox)でボタンによって上下左右に移動します。 FormのSizeは800,630です。 自機の移動がボタンなのでキー入力によって操作できるようにしたいのですが、 それと、自機の移動範囲を画面からでないようにしたいです。 あまりC#を理解できてない上でつくったのでおかしな点が多々あると思います。 教えていただける方がいると助かります。

  • VBA のメッセージボックスに・・・

    Private Sub CommandButton1_Click() Dim intMsg As Integer Dim x As Double x = Val(Cells(3, 2).Value) / Val(Cells(2, 2).Value) ^ 2 Cells(2, 5) = x intMsg = MsgBox("指数は&x&" & vbCrLf & "&z&です。") Select Case x Case 0 To 18 MsgBox "やせぎみ" Case 19 To 25 MsgBox "普通" Case 26 To 30 MsgBox "太り気味" Case Else MsgBox "危険" End Select End Sub ってプログラムを組んだのですが メッセージボックスに結果が表示されません。 計算して出た値を、メッセージボックス内のxとzで表示させたいのですが・・・ &ではさむ?だけではだめなんですか?

  • オブジェクトがぶつかった時の処理

    <script type="text/javascript"> <!-- var imgStar ,imgMoon, timer; var dx = 6, dy = 4, x = 40, y = 160; function startMove(){ if (document.getElementById){ imgStar = document.getElementById("star"); imgMoon = document.getElementById("moon"); timer = setInterval("moveImg()",50); } } function moveImg(){ imgStar.style.left = x + "px"; imgStar.style.top = y + "px"; imgMoon.style.left = (440-x) + "px"; imgMoon.style.top = (320-y) + "px"; x = x + dx; y = y + dy; if (x<=40 || x >= 400) dx = -dx; if (y<=40 || y >= 280) dy = -dy; } function stopTimer() { if (window.clearInterval) clearInterval(timer); } //--> </script> 星と月がぶつかると、お互い逆方向にはね返るようにしたいのですが、この場合どうすれば良いでしょうか?

  • 画像のラベリング

    画像処理について勉強しています。 画像のラベリングを行うプログラムを書いていたのですが、意図した結果になりません。 以下の関数で実現しようとしましたが、上手くいきませんでした。何か、決定的に間違っている点などがありましたら、教えてください。 また、参考になるWebページなどがありましたら、教えていただけると幸いです。 image2[][]には、レナ画像の512x512を判別分析法を使用して2値化した画像データが格納されています。 また、label[]は全て-1で初期化しました。(initialize()) void labeling(){ int x,y; int up_label,left_label; int label_num=1; //初期ラベル int label_add=1; //ラベルの増分 int max; int i; initialize(); for(y=0; y<y_size1; y++){ for(x=0; x<x_size1; x++){ if(image2[y][x]==0 && label[y][x]==-1){ up_label=left_label=500; if(y-1>=0) up_label=label[y-1][x]; if(x-1>=0) left_label=label[y][x-1]; if(up_label==500 && left_label==500){//(0,0)の地点の処理 label[y][x]=label_num; }else if(up_label==left_label){//上と左が等しい場合の処理 //上と左のラベルが無い場合はラベルを作る if(up_label < 0) label_num += label_add; //ラベルを付与 label[y][x]=label_num; }else{//それ以外の処理 //上と左で小さいほうのラベルを付与する if(up_label<0) label[y][x]=left_label; else if(left_label<0) label[y][x]=up_label; else label[y][x]= (up_label < left_label)? up_label:left_label; } } } } }

専門家に質問してみよう