- ベストアンサー
Visual Basic 6.0でLabelについての質問
- Visual Basic 6.0でのLabelについての質問です。100個のLabelの中からどのラベルが押されても同じ処理をさせる方法を教えてください。
- Label2からLabel101までの100個のLabelがありますが、それぞれのクリックイベント内でLabel1のキャプションを「停止」に変える処理を書くことは長くなってしまいます。よりスマートな処理方法を教えてください。
- Visual Basic 6.0で100個のLabelがある場合、どのLabelがクリックされても同じ処理を行いたいです。Label1のキャプションを「停止」に変える方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>こちらのプログラム上の問題でオブジェクト名は同じにできないのです・・・。 先の質問「Visual Basic6.0を使用しています。」 http://oshiete1.watch.impress.co.jp/qa5903905.html で問題解決したためでしょうか? 基本設計を見直しましょう 先の質問や今回の質問もラベルをコントロール配列にしておけば簡単に解決できることです。 わざわざ茨の道を進む必要はありません、プログラムもスッキリしますし・・・ 今からでもコントロール配列に換えるべきです
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
新しいプロジェクトで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 も。) ご参考になれば。
お礼
詳しい回答していただいてありがとうございます!! プログラムに組み込ませていただいたのですが、 Set Lab(i).fmVal = Form1.Controls("Label" & i) で『インデックスが有効範囲にありません』と言われてしまうので、 もう少しにらめっこしてみます!!
- qaqa246
- ベストアンサー率27% (45/163)
オブジェクト名を同じにしてコントロール配列を使えばいい。 そうすればクリックイベントも一つで済む。
お礼
早速の回答ありがとうございます!! 説明不足で申し訳ないです! こちらのプログラム上の問題でオブジェクト名は同じにできないのです・・・。
お礼
>先の質問で問題解決したためでしょうか? そのとうりです・・・。 コントロール配列について勉強不足なため、使うのに抵抗がありました。 コントロール配列に変更するのはそこまで大変な作業ではないので、チャレンジしてみたいと思います!! ありがとうございました!