• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6.0 で パート2)

VB6.0でコントロール配列を使用したランプの点灯と消灯

このQ&Aのポイント
  • VB6.0でコントロール配列を使用して、ボタンをクリックするとランプが点灯し、再びクリックするとランプが消えるという動作を実現する方法を教えてください。
  • また、一番左側のランプが点灯した後にボタンを再びクリックすると、右側のランプが順番に点灯していくような動作も実現したいです。
  • 具体的な動作の設定方法やコードの記述方法をご教示いただけると助かります。

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

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

この処理に必要なものを考えて見ましょう 点灯するランプの位置を記憶する変数 点灯する方向を記憶する変数 この2点が必要でしょう Formレベルの変数を2つ宣言句に記述します # フォームコードの先頭部分です dim nIndex as Integer ' ランプの位置 dim nDir as Boolean ' 点灯する方向 True:右、False:左 フォームのLoadイベントで 上記の変数を初期化 nDir = False nIndex = -1 ' ランプが全部消灯の特殊値として -1とする ボタンをクリックした際の処理 nDirにより nIndexを加算するのか減算するのかを判断する nIndexが両端に来た際に nDirを反転する といった処理が必要でしょう if nIndex > -1 then   ' 初回以外の場合は点灯しているランプを消す   CWBtn( nIndex ).Value = False end if if nDir = True then   ' 右方向への処理   nIndex = nIndex - 1   if nIndex < 0 then     ' 右端を越えてしまったので反転する     nDir = False     nIndex = 1   end if else   ' 左方向への処理   nIndex = nIndex + 1   if nIndex > 7 then     ' 左端を越えてしまったので反転する     nDir = True     nIndex = 6   end if end if ' ランプの点灯処理 CWBtn(nIndex).Value = True といった具合でしょう

aries-0323
質問者

お礼

丁寧なコメント付のコード有難う御座います! まだまだ勉強が未熟ですので、こうしたいにはどういう方法で処理すれば良いかなどフローチャートを書きながら勉強してるのですが… 教えて頂いたコードをコピーするだけでなく、動きを確認しながら 勉強させて頂きます!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB6.0 で

    現在、VB6.0でイルミネーションもどきのプログラムを作成しています。 8つのランプコントロールがコントロール配列されていて、初めは全て消灯している状態から、コマンドボタンを1回クリックすると一番右側の一つが点灯し、またクリックすると右のランプが消えて、左隣のランプが点灯します。 これを繰り返していって、一番左のランプが点灯したら再び一番右のランプが点灯するという下の図の様な感じです。 7 6 5 4 3 2 1 0 ←オブジェクトCWBtnのIndex番号です。 ○○○○○○○● ↓ ○○○○○○●○ ↓ ○○○○○●○○ ↓ ○○○○●○○○ ↓ ○○○●○○○○ ↓ ○○●○○○○○ ↓ ○●○○○○○○ ↓ ●○○○○○○○ ↓ ○○○○○○○● この繰返しです。 現在のコードです。当方、VBを勉強し始めて未熟ですので、まずどういった変数を用意するか、データ型はどうしようなどで深く悩んでしまうレベルです。突っ込みどころ満載でしょうが、ご容赦下さい。。。 Private Sub cmd2_Click() '変数の宣言 Dim Index As Integer   For Index = 0 To 7 Step 1 If CWBtn(Index).Value = False Then Select Case Index Case 0 CWBtn(0).Value = True Case 1 CWBtn(1).Value = True Case 2 CWBtn(2).Value = True Case 3 CWBtn(3).Value = True Case 4 CWBtn(4).Value = True Case 5 CWBtn(5).Value = True Case 6 CWBtn(6).Value = True Case 7 CWBtn(7).Value = True End Select Exit For ElseIf CWBtn(Index).Value = True Then Select Case Index Case 0 CWBtn(0).Value = False Case 1 CWBtn(1).Value = False Case 2 CWBtn(2).Value = False Case 3 CWBtn(3).Value = False Case 4 CWBtn(4).Value = False Case 5 CWBtn(5).Value = False Case 6 CWBtn(6).Value = False Case 7 CWBtn(7).Value = False End Select End If Next Index 実行は出来るのですが、うまくいきません。 どなたか教えて下さい。宜しくお願いします。

  • excel2007 VBで

    下記のマクロ作成して実際にセルにA、あるいは何かデータを入力しても下記イベント?が発生している気配がありません。 Application.EnableEvents = Falseの行がなにか問題なのでしょうか。実プログラムは If Target.Value = "A" Or Target.Value = "A" Thenの他にB、C、計算も含んでいるのですがApplication.EnableEvents = TrueはEnd Subの前行に入れてあります。 他に設定することがあるのでしょうか。どなたか教えてください。 Private Sub Worksheet_Change(ByVal Target As Range)    If Target.Count > 1 Then Exit Sub '複数セルの入力は無視 Application.EnableEvents = False '割込み停止 ’[B3] = 123 ’Stop If Target.Value = "A" Or Target.Value = "A" Then Target.Value = "A" End If Application.EnableEvents = True '割込み再開 End Sub excel2007 VB6.5です。

  • Excel2007のカレンダーコントロール

    Excel2007のカレンダーコントロールで質問します。 Private Sub Calendar1_Click() ActiveCell.Value = Calendar1.Value ActiveSheet.Calendar1.Visible = False End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$4" Then ActiveSheet.Calendar1.Visible = True End If End Sub この状態ですと、セルA4をクリックしたときだけカレンダーコントロールが表示されます。 A列をどこでもクリックしたときにカレンダーコントロールが表示されるようにするには どこを、どう変更すればよいのでしょうか? 教えてください。

  • VBでの簡易電卓の作成(減算方法)で困っています。

    技術評論社のVisual Basic5.0入門編という、 参考書を見ながら、作成したのですが。 どうも、参考書のコードが間違っているみたいでした 良かったら、お知恵をお貸しください。 とりあえず、足し算と引き算処理の作成です。 ※使用コントロール 0から9までのコマンドボタンをコントロール配列と、 足し算、引き算、クリアーのコマンドボタンが3つ、 後、数字入力用のテキストボックスが1つです。 コード **************************************************** Option Explicit Dim EnterFlag As Boolean 'プラス、マイナスキーが押された直後ならTrueを示すフラグ。 Dim S As Long Private Sub Command3_Click() 'クリアーボタン Text1.Text = "" S = 0 End Sub Private Sub Plas_Click() '加算処理 S = S + Val(Text1.Text) Text1.Text = S EnterFlag = True End Sub Private Sub Mainas_Click() '減算処理 S = S - Val(Text1.Text) Text1.Text = S EnterFlag = True End Sub Private Sub Form_Load() Text1.Text = "" S = 0 End Sub Private Sub key_Click(Index As Integer) If EnterFlag Then Text1.Text = "" EnterFlag = False End If If Len(Text1.Text) < 10 Then '10桁以内のとき Text1.Text = Text1.Text & Index End If End Sub ********************************************************* とこんな感じです。 加算処理は、上手くできますが。 減算処理は、明らかにコードが間違っていると思いました。 初めて(1回目)マイナスボタンを押した時に、変数Sには、必ずマイナス が入ってしまう状態です。 上手く減算処理出来る方法のアドバイスよろしくお願いします。

  • VBAでシート上のTEXTBOXの値を変更するとイベントが無限に入る。

    ExcelのVBAでシート上に貼り付けたCheckBoxで  内容を変更したくない場合、  下記のようなプログラムを作りました。 Private Sub CheckBox1_Click()     MsgBox "内容を変更しないでください"     If CheckBox1.Value = True Then       CheckBox1.Value = False     Else       CheckBox1.Value = True     End If End Sub すると、イベントが入りまくって、抜け出せなくなりました。 セルの場合は、Application.EnableEvents = False を使用してイベントを止めることができたのですが、 コントロールの場合は、そのような命令が見つかりません。 なにか良い手はないでしょうか。 よろしくお願いいたします。

  • 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

  • VB6イルミネーションプログラムその3

    いつもお世話になっています。 テキストボックスに1~255までの数字を入力し、コマンドボタンをクリックしたら、入力した数字を2進数に変換してランプを点灯するというプログラムを考えています。 例えば、テキストボックスに170と入力し、コマンドボタンをクリックしたら以下の様にランプが点灯するプログラムです。 ●○●○●○●○ 10101010 170の2進数 色々と調べ目的とする動きはするのですが、別の方法として値を引数にして2進数に変換した値でランプを点灯する処理を手続き(サブルーチン)として分離するという処理はどのようにすればよいのでしょうか? 現コードは以下です。(未熟ですので、コメントが見苦しくすみません…) Private Sub cmd1_Click() '変数の宣言 Dim Kazu As String Dim Binary(7) As Integer Dim Nishin As Integer Dim Value As String Dim Index As Integer 'テキストボックスへ入力した文字列を数値型に変換し、格納 Nishin = Val(txtKazu.Text) '2進数への変換処理 For Index = 0 To 7 Step 1 'Nishinに入力された数値を2で除算し、8ビット分の余りを繰返し求め格納 Binary(Index) = Nishin Mod 2 'Nishinの除算の商を求め、格納 Nishin = Nishin \ 2 Next Index '各余りを下から順に並べる処理 For Index = 7 To 0 Step -1 '変数Binaryを変数Kazuの型である文字列型へ変換し、連結して格納 Kazu = Kazu & CStr(Binary(Index)) Next Index '2進数の結果をランプコントロールへ反映 CWBtn(0).Value = Mid(Kazu, 8, 1) CWBtn(1).Value = Mid(Kazu, 7, 1) CWBtn(2).Value = Mid(Kazu, 6, 1) CWBtn(3).Value = Mid(Kazu, 5, 1) CWBtn(4).Value = Mid(Kazu, 4, 1) CWBtn(5).Value = Mid(Kazu, 3, 1) CWBtn(6).Value = Mid(Kazu, 2, 1) CWBtn(7).Value = Mid(Kazu, 1, 1) End Sub サブルーチンって??と思い、サイトや参考書を色々と見たのですが、サンプルコードなどを見ても理解出来ませんでした。 未熟で理解が浅いのですが、役割として「離れた箇所の文の並びを実行し、元の場所に制御を戻す」という様な感じですよね…元の場所で実行せず、わざわざ離れた箇所で実行するメリットもピンときません… 宜しくお願いします。

  • VBA初心者なのですが(Userformについて)

    まずは質問ご覧いただきありがとうございますm(_ _)m さっそくなのですが、次のプログラムを打つとSelect Caseのところで”指定されたオブジェクトは見つかりません”と出てしまうのですがなぜでしょうか。回答お待ちしております。 Private Sub CommandButton2_Click() Dim msg As String, i As Integer Dim ii As Integer, msg2 As String For i = 1 To 3 If Controls("CheckBox" & i).Value = True Then msg = msg & Controls("CheckBox" & i).Caption & vbCrLf End If Next i For ii = i To 2 If Controls("OptionBotton" & i).Value = True Then msg2 = msg2 & Controls("OptionBottob" & i).Caption & vbCrLf End If Next ii Select Case Controls("CheckBox" & i).Value & Controls("OptionBotton" & i).Value Case Controls("CheckBox" & i).Value = True & Controls("OptionBotton" & i).Value = False MsgBox msg & "がチェックされてます" Case Controls("CheckBox" & i).Value = False & Controls("OptionBotton" & i).Value = True MsgBox msg2 & "オン" Case Controls("CheckBox" & i).Value = True & Controls("OptionBotton" & i).Value = True MsgBox msg & "がチェックされています" & vbCrLf & msg2 & "オン" Case Else MsgBox "チェック又は、オンにしてください" End Select End Sub

  • Excel フォームコントロール オプション

    いつもお世話になってます。 ActiveXのOptionButtonやChekcBoxは複製Windowでは働かないので、フォームコントールを使おうと思います(フォームコントロールは動作します)。 例えばVBAなら,次のようにすればCheckBox2はoffになります。 これをフォームコントロールのチェック(ボックス)でやりたいのですが? Sub CheckBox1_Click() If CheckBox1.Value = True Then CheckBox2.Value = False" 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 思い通りに動かすにはどんなコードにしたらいいですか?