- ベストアンサー
サブルーチンにオブジェクト名を引数で渡したい
度々お世話になっております。 基本的なことだとは思うのですが,うまく探せませんでしたので質問させてください。 現在,次のようなプログラムをVB6.pro環境で作っています。 ・ボタン(command1)を押す→ボタンの色が赤に変わる ソースは以下の通りです。 Private Sub Command1_Click() Call ColorChange(Command1) End Sub Sub ColorChange(Obj As Object) Obj.BackColor = vbRed End Sub 以上のプログラムでは,サブルーチンを呼び出す際に オブジェクト名(Command1)をダイレクトに入力していますが, これを自動で入力する関数はありますでしょうか。 Form1ならば,Meのようなものです。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
s_husky です。 次は、Command1のCaptionを書き換えるコードです。 Option Explicit Private Sub Command1_Click() CaptionChange End Sub Private Sub CaptionChange() On Error Resume Next Me.Controls(Screen.ActiveControl.Name).Caption = "AAAAA" MsgBox "Next" Screen.ActiveControl.Caption = "bbbbb" End Sub
その他の回答 (4)
s_husky です。 タイマー監視する場合など、オブジェクトが変更されたか否かをチェックするのにオブジェクト名を静的変数に代入するなどの工夫が必要です。そういうことを示唆するために同じ動きのコードを2つ書きました。
お礼
お礼が遅くなり,大変申し訳ありません。 なるほど,そのような意図があったのですね。 勉強させていただきました。 今回は大変お世話になり,ありがとうございました。
- KenKen_SP
- ベストアンサー率62% (785/1258)
> 実は,複数のボタンで同じような動作をしたいのです。 ボタンをコントロール配列にしてしまえば、イベントは一つ書くだけです。 Private Sub Command1_Click(Index As Integer) Me.Command1(Index).BackColor = vbRed End Sub
お礼
ご回答ありがとうございます。 確かに,ボタンのみであればコントロール配列で解決できます。 ただ,サブルーチンを呼び出した元のオブジェクト名がわかれば, コントロール配列にしていないオブジェクトにも応用できますし, 様々な利用の仕方ができると思ったので,質問させていただきました。 #3の方の方法で,ある程度は解決できるので,それでやってみます。 (ある程度と書いたのは,Timerなどバックグラウンドで動く オブジェクトには,Screen.ActiveControlが使えないからです) 貴重なお時間をいただき,ありがとうございました。
コマンドボタンが複数個ある場合、いちいち、各々のクリックイベントにコードを書きたくない。 であれば、タイマーでどのオブジェクトにフォーカスが移ったかを監視するのも手です。
補足
なるほど。 確かにそれであれば代用可能ですね。ありがとうございます。 しかし,やはりFormのMeに相当するものは無いのしょうか。
- ackapapa
- ベストアンサー率44% (8/18)
直接command1を呼んでは駄目なんでしょうか? Private Sub Command1_Click() Command1.BackColor = vbRed End Sub 私の知る限りFromのMeに代わるようなものはありません
補足
ご回答ありがとうございました。 >>直接command1を呼んでは駄目なんでしょうか? > はい。できれば。 実は,複数のボタンで同じような動作をしたいのです。 他にも狙いはあるのですが,煩雑になってしまいますので…。
お礼
なるほど!押された瞬間はアクティブなので, Screen.ActiveControlなる関数を使えば特定できるのですね。 アクティブなものを指定できるので,SetFocusと一緒に使えば 色々な応用が利きそうです。 ご回答ありがとうございました。 ところで,もしお時間があればお答えいただきたいのですが, Me.Controls(Screen.ActiveControl.Name) と Screen.ActiveControl は,どのように違うのでしょうか。 後者のみでコードを書いた場合,あるいは前者のみで書いた場合 両方を試してみたのですが,見た目には同じ動きでした。