• ベストアンサー

サブルーチンにオブジェクト名を引数で渡したい

度々お世話になっております。 基本的なことだとは思うのですが,うまく探せませんでしたので質問させてください。 現在,次のようなプログラムを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のようなものです。 よろしくお願いいたします。

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

  • ベストアンサー
noname#22222
noname#22222
回答No.3

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

Caryo_t
質問者

お礼

なるほど!押された瞬間はアクティブなので, Screen.ActiveControlなる関数を使えば特定できるのですね。 アクティブなものを指定できるので,SetFocusと一緒に使えば 色々な応用が利きそうです。 ご回答ありがとうございました。 ところで,もしお時間があればお答えいただきたいのですが, Me.Controls(Screen.ActiveControl.Name) と Screen.ActiveControl は,どのように違うのでしょうか。 後者のみでコードを書いた場合,あるいは前者のみで書いた場合 両方を試してみたのですが,見た目には同じ動きでした。

その他の回答 (4)

noname#22222
noname#22222
回答No.5

s_husky です。 タイマー監視する場合など、オブジェクトが変更されたか否かをチェックするのにオブジェクト名を静的変数に代入するなどの工夫が必要です。そういうことを示唆するために同じ動きのコードを2つ書きました。

Caryo_t
質問者

お礼

お礼が遅くなり,大変申し訳ありません。 なるほど,そのような意図があったのですね。 勉強させていただきました。 今回は大変お世話になり,ありがとうございました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> 実は,複数のボタンで同じような動作をしたいのです。 ボタンをコントロール配列にしてしまえば、イベントは一つ書くだけです。 Private Sub Command1_Click(Index As Integer)   Me.Command1(Index).BackColor = vbRed End Sub

Caryo_t
質問者

お礼

ご回答ありがとうございます。 確かに,ボタンのみであればコントロール配列で解決できます。 ただ,サブルーチンを呼び出した元のオブジェクト名がわかれば, コントロール配列にしていないオブジェクトにも応用できますし, 様々な利用の仕方ができると思ったので,質問させていただきました。 #3の方の方法で,ある程度は解決できるので,それでやってみます。 (ある程度と書いたのは,Timerなどバックグラウンドで動く  オブジェクトには,Screen.ActiveControlが使えないからです) 貴重なお時間をいただき,ありがとうございました。

noname#22222
noname#22222
回答No.2

コマンドボタンが複数個ある場合、いちいち、各々のクリックイベントにコードを書きたくない。 であれば、タイマーでどのオブジェクトにフォーカスが移ったかを監視するのも手です。

Caryo_t
質問者

補足

なるほど。 確かにそれであれば代用可能ですね。ありがとうございます。 しかし,やはりFormのMeに相当するものは無いのしょうか。

  • ackapapa
  • ベストアンサー率44% (8/18)
回答No.1

直接command1を呼んでは駄目なんでしょうか? Private Sub Command1_Click()  Command1.BackColor = vbRed End Sub 私の知る限りFromのMeに代わるようなものはありません

Caryo_t
質問者

補足

ご回答ありがとうございました。 >>直接command1を呼んでは駄目なんでしょうか? > はい。できれば。 実は,複数のボタンで同じような動作をしたいのです。 他にも狙いはあるのですが,煩雑になってしまいますので…。

関連するQ&A