• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Visual Basic 6.0でのLabelについて質問です。)

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のキャプションを「停止」に変える方法を教えてください。

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

  • ベストアンサー
  • 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
質問者

お礼

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