Visual Basic 6.0でLabelについての質問

このQ&Aのポイント
  • Visual Basic 6.0でのLabelについての質問です。100個のLabelの中からどのラベルが押されても同じ処理をさせる方法を教えてください。
  • Label2からLabel101までの100個のLabelがありますが、それぞれのクリックイベント内でLabel1のキャプションを「停止」に変える処理を書くことは長くなってしまいます。よりスマートな処理方法を教えてください。
  • Visual Basic 6.0で100個のLabelがある場合、どのLabelがクリックされても同じ処理を行いたいです。Label1のキャプションを「停止」に変える方法を教えてください。
回答を見る
  • ベストアンサー

Visual Basic 6.0でのLabelについて質問です。

Visual Basic 6.0でのLabelについて質問です。 今、Labelが100個あるとして、 どのラベルが押されても同じ処理をさせたい場合、どのようにプログラムを組めばよいかわかりません・・・ そこで、 Private Sub Label2_Click() Label1.Caption = "停止" End Sub Private Sub Label3_Click() Label1.Caption = "停止" End Sub Private Sub Label4_Click() Label1.Caption = "停止" End Sub    ・    ・    ・ Private Sub Label101_Click() Label1.Caption = "停止" End Sub のように100個繰り返しても良いのですが、だらだら長くなってしまうので、スマートに 処理できる方法を探しています。 もしご存知の方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • uruz
  • ベストアンサー率49% (417/840)
回答No.3

>こちらのプログラム上の問題でオブジェクト名は同じにできないのです・・・。 先の質問「Visual Basic6.0を使用しています。」 http://oshiete1.watch.impress.co.jp/qa5903905.html で問題解決したためでしょうか? 基本設計を見直しましょう 先の質問や今回の質問もラベルをコントロール配列にしておけば簡単に解決できることです。 わざわざ茨の道を進む必要はありません、プログラムもスッキリしますし・・・ 今からでもコントロール配列に換えるべきです

dondada0607
質問者

お礼

>先の質問で問題解決したためでしょうか?  そのとうりです・・・。 コントロール配列について勉強不足なため、使うのに抵抗がありました。 コントロール配列に変更するのはそこまで大変な作業ではないので、チャレンジしてみたいと思います!! ありがとうございました!

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

新しいプロジェクトでLabel1~4を配置。 Label1は初期値:”稼働”で Label2~4をクリックすると”停止”となる。 1)上記をForm1に配置し、 Private i As Integer Private Sub Form_Load() Label1.Caption = "稼働" For i = 2 To 4 Set Lab(i).fmVal = Form1.Controls("Label" & i) Next End Sub Private Sub Form_Unload(Cancel As Integer) For i = 2 To 4 Set Lab(i).fmVal = Nothing Next End Sub Private Sub Label1_Click() Label1.Caption = "稼働" End Sub 2)メニューバーの「プロジェクト」-「標準モジュールの追加」で 標準モジュール:Module1に Public Lab(4) As New Class1 3)メニューバーの「プロジェクト」-「クラスモジュールの追加」で クラスモジュール:Class1に Public WithEvents fmVal As Label Private Sub fmVal_Click() Form1.Label1.Caption = "停止" End Sub とする。 この場合Label2~4を変数:iとLab(4)で設定しているので、 適宜修正して下さい。 ( For i = 2 To 4 も。) ご参考になれば。

dondada0607
質問者

お礼

詳しい回答していただいてありがとうございます!! プログラムに組み込ませていただいたのですが、 Set Lab(i).fmVal = Form1.Controls("Label" & i) で『インデックスが有効範囲にありません』と言われてしまうので、 もう少しにらめっこしてみます!!

  • qaqa246
  • ベストアンサー率27% (45/163)
回答No.1

オブジェクト名を同じにしてコントロール配列を使えばいい。 そうすればクリックイベントも一つで済む。

dondada0607
質問者

お礼

早速の回答ありがとうございます!! 説明不足で申し訳ないです! こちらのプログラム上の問題でオブジェクト名は同じにできないのです・・・。

関連するQ&A

  • Labelコントロールで"&"が"_"に変換される

    こんにちは。 いつもお世話になっております。 早速ですが質問させて下さい。 内容はタイトル通りなのですが、 Labelコントロールのキャプションに"&"をセットすると "_"に置き換わってしまいます。 --------------------------------------------- Private Sub Command1_Click() Label1.Caption = "test & test" Debug.Print "test & test" Debug.Print Label1.Caption   End Sub --------------------------------------------- 上記でフォームのラベルには"test _test"と表示されてしまいます。 Debug.Printを使用した結果は"test & test"と表示されるのですが。 原因をご存知の方がみえましたらご教示下さい。 <環境> Windows 2000 , VB6.0

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • ビジュアルベーシックのお絵かき掲示板

    まったくの初心者です。初歩的な質問で申し訳ありません。 カラーのところでクリックが実行できません。 なぜなのかよくわかりません。お暇なときご教授下さい。  そしてもう一つ質問ですが以下のコードを追加したいの ですがどこに挿入すればいいのですか。 →private sub image_click() ccolor = 7 end sub ここまでのコードを追加したいです。 ーーーーーーーーーーーーーーーーーーーーーーーーーー Private Sub Command1_Click() Form1.Cls End Sub Private Sub Command2_Click() End End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Form1.DrawWidth = 3 If Button = 1 Then PSet (X, Y), QBColor(ccolor) End If End Sub Private Sub Label1_Click() cccolor = 14 End Sub Private Sub lavel2_click() cccolor = 0 End Sub Private Sub label3_click() ccolor = 9 End Sub Private Sub label4_click() ccolor = 12 End Sub Private Sub label5_click() ccolor = 10 End Sub

  • VBA 年月日から日曜日に当たる日の文字を赤くする

    よろしくお願いします。 TextBox2に年号(西暦) ComboBox1に月 TextBox7に日 を、入力します。 入力方法は、Label1からLabel31を押下して日付けを入れます。 したときに各Labelの内、日曜日に該当するLabelならCaptionの文字を赤くする。 Private Sub Label1_Click() TextBox7.Value = 1 ’もし1日が日曜日ならLabel1のCaptionの文字を赤くする End Sub Private Sub Label2_Click() TextBox7.Value = 2 End Sub Private Sub Label3_Click() TextBox7.Value = 3 End Sub ~ Private Sub Label29_Click() TextBox7.Value = 29 End Sub Private Sub Label30_Click() TextBox7.Value = 30 End Sub Private Sub Label31_Click() TextBox7.Value = 31 End Sub 追 ComboBoxで日付けをダウンリスト表示したかったのですが、1列表示で 長くなってしまいます。 ※2列に表示する方法を知らないもので、Labelで2列表示にしました。 もし、ダウンリストを2列表示できるのであれば、ぜひともご教示をお願いします。 無識なものですみません。 何卒宜しくお願い致します。

  • 単純な質問で恐縮です。

    単純な質問で恐縮です。 コマンドボタン1を押したら、ラベル1が消えて、ラベル2が表示させるようにしたいのですが動きません。 Private Sub CommandButton1_Click() Label1.Visible = False Label2.Visible = True end sub どうしてでしょうか?

  • マクロでフォーム処理の繰り返し

    よろしくお願いします。 マクロでフォームを作成したとき同じような処理がたくさんある時、繰り返し処理は可能でしょうか? 例えば以下のような処理をループ処理できないでしょうか? Private Sub Label1_Click() Label1.BackColor = RGB(255, 0, 0) End Sub Private Sub Label2_Click() Label2.BackColor = RGB(255, 0, 0) End Sub Private Sub Label3_Click() Label3.BackColor = RGB(255, 0, 0) End Sub   ・   ・   ・ Private Sub Label100_Click() Label100.BackColor = RGB(255, 0, 0) End Sub

  • excel 2003 マクロですっきりさせたい

    お世話になります。 ユーザーフォーム上の テキストボックス 商品名_1の値が空白になったら ラベルも空白にするというマクロを組みました。 ラベルがたくさんあり、何かすっきりとできる方法があれば 教えてください!>< よろしくお願いします。 Private Sub 商品名_1_Change() If 商品名_1.Value = "" Then Label1_1.Caption = "" Label1_2.Caption = "" Label1_3.Caption = "" Label1_4.Caption = "" Label1_5.Caption = "" Label1_6.Caption = "" Label1_7.Caption = "" End If End Sub

  • タイマーの使い方

    VB初心者です(6.0を使っています) タイマーの使い方がよく分かっていません。 ボタンを押してからの経過時間をラベルに表示させたいと思っているのですが、 ----------------------------------------------- Private Sub Command1_Click()   Timer1.Interval = 1000   処理1   処理2    ・    ・    ・   Timer1.Interval = 0 End Sub Private Sub Timer1_Timer()   Label1.Caption = [経過時間] End Sub ----------------------------------------------- という感じに書いていると、[処理1]~をしている間はラベルが表示されなくて、 最後の[処理]が終わった直後の[経過時間]のみが表示されます。 こういう形ではタイマーは使用できないのでしょうか? 他のWebサイトなども調べてみたのですが、解決できませんでした。 どなたか教えていただけませんでしょうか?

  • visual basic 2010 の デザイン

    visual basic 2010で、ボタンをクリックしただけ数が増えるように作ったんですけど、 9から10に切り替わるときに、位がずれてしまいます。 分かりやすくするため、*をつけると、**9*→**10 これを、***9→**10 こうなるようにしたいんです。 どうやったらできますか??? ============================================================ Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim kazu As Long kazu = Label1.Text Label1.Text = kazu + 1 End Sub End Class

  • 途中でエラーが出てしまい手が止まってしまいました(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

専門家に質問してみよう