プロが教えるわが家の防犯対策術!

度々お世話になっております。
基本的なことだとは思うのですが,うまく探せませんでしたので質問させてください。

現在,次のようなプログラムを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のようなものです。

よろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

なるほど!押された瞬間はアクティブなので,
Screen.ActiveControlなる関数を使えば特定できるのですね。
アクティブなものを指定できるので,SetFocusと一緒に使えば
色々な応用が利きそうです。
ご回答ありがとうございました。

ところで,もしお時間があればお答えいただきたいのですが,
Me.Controls(Screen.ActiveControl.Name)

Screen.ActiveControl
は,どのように違うのでしょうか。
後者のみでコードを書いた場合,あるいは前者のみで書いた場合
両方を試してみたのですが,見た目には同じ動きでした。

お礼日時:2006/06/20 10:54

s_husky です。



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

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

お礼日時:2006/06/27 16:27

> 実は,複数のボタンで同じような動作をしたいのです。



ボタンをコントロール配列にしてしまえば、イベントは一つ書くだけです。

Private Sub Command1_Click(Index As Integer)
  Me.Command1(Index).BackColor = vbRed
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
確かに,ボタンのみであればコントロール配列で解決できます。
ただ,サブルーチンを呼び出した元のオブジェクト名がわかれば,
コントロール配列にしていないオブジェクトにも応用できますし,
様々な利用の仕方ができると思ったので,質問させていただきました。

#3の方の方法で,ある程度は解決できるので,それでやってみます。
(ある程度と書いたのは,Timerなどバックグラウンドで動く
 オブジェクトには,Screen.ActiveControlが使えないからです)

貴重なお時間をいただき,ありがとうございました。

お礼日時:2006/06/20 11:05

コマンドボタンが複数個ある場合、いちいち、各々のクリックイベントにコードを書きたくない。


であれば、タイマーでどのオブジェクトにフォーカスが移ったかを監視するのも手です。

この回答への補足

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

補足日時:2006/06/19 16:15
    • good
    • 0

直接command1を呼んでは駄目なんでしょうか?



Private Sub Command1_Click()
 Command1.BackColor = vbRed
End Sub

私の知る限りFromのMeに代わるようなものはありません

この回答への補足

ご回答ありがとうございました。

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

補足日時:2006/06/19 15:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!