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

フォーム上に配置している全てのオブジェクトのプロパティを
一気に変更したいのですが、何か良い方法はありませんか?
設計段階では全て選択して一気に変更できますよね・・・
しかしながら、run状態で一気に変更する方法が見つかりません。

例として様々な名前ついたオブジェクトをコードで「Enabled=false」に変更したいのですが、この場合はやはり、ひとつのオブジェクトごとにコードを記述しなくてはならないのでしょうか。

A 回答 (2件)

強引な方法ですが、こんな感じでできます。



Dim objControl As Control
On Error Resume Next
For Each objControl In Me.Controls
objControl.Enabled = False
Next

フォーム上のコントロールは、Controlsで取得できます。
On Error Resume Nextをかけているのは、コントロールにEnabledプロパティがないものがあるとエラーが発生するためです。

フォーム全体を殺したい場合は、
  Me.Enabled = False
って方法もありますが、用途が違いますね。
    • good
    • 0
この回答へのお礼

まさに的確な方法をいただきましてありがとうございます。
私がしたかったことが一発で解決です。
フォーム上に50個以上のオブジェクトがあって
ある時にだけそのうちの3つのオブジェクト以外は触られたくなかったのです。
この方法で全てをFalseに設定した後に3つだけTrueにするほうがはるかに時間と手間が省けます。
ありがとうございました。

お礼日時:2001/06/23 11:06

そのような方法は今までで聞いた事ありません。


(実はそのような方法があったら申し訳ないのですが...)
しかし、そのようなケースに遭遇したことはあります。
その時、私はこのように対処しました。

例えば、テキストボックスやラベルが複数あり、
ある状況によって、使えたり使えなかったりするパターンが
3通りあるとします。
それらをそれぞれ対象のコントロールのTagプロパティに
"1","2","4"と設定しておき、
下記に書いたような関数を呼びます。

Private Sub Command1_Click()
Call EnabledChange(1)
End Sub

Private Sub EnabledChange(ByVal lTag As Long)
Dim w As Control
For Each w In Me 'Form上の全てのコントロールを走査する
With w
If .tag = "" Or .tag = "0" Then
'何もしない
Else
'使用可不可の設定
.Enabled = ((CLng(.tag) And lTag) > 0)
End If
End With
Next w
End Sub

これによって、デザイン時に設定したTagプロパティの値で
自動的にEnabledプロパティは一気に変更できます。
また、Tagプロパティを使わずに、
Fremeコントロールの上にコンテナさせて、
このFrameコントロールに乗っているから変更するという方法もあります。

Private Sub Command1_Click()
Call EnabledChange(Frame1)
End Sub

Private Sub EnabledChange(ByVal objFrame As frame)
Dim w As Control
For Each w In Me 'Form上の全てのコントロールを走査する
With w
Select Case .Container.Name
Case Me.Name
'フォームに乗っているものに関しては何もしない
Case objFrame.Name
'選択したFrameに乗っているものに関しては使用可にする
.Enabled = True
Case Else
'選択したFrame以外のフレームに乗っているものに関しては
'使用不可にする
.Enabled = False
End Select
End With
Next w
End Sub

まるっきり全てのコントロールを使用不可にするのであれば
以下の方法でよいと思います。

Private Sub Command1_Click()
Call EnabledChange(False)
End Sub

Private Sub EnabledChange(ByVal bFlg As Boolean)
Dim w As Control
For Each w In Me 'Form上の全てのコントロールを走査する
With w
'使用可不可の設定をする。
.Enabled = bFlg
End With
Next w
End Sub

とりあえず、一気にとはいきませんが、
一つ一つ書かなくても良い分、いくらか楽だとは思いますが。
ご参考までに...。
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。とりあえづためしにやってみましたが
あまりうまくいきませんでした。でも、VBの勉強になりました。 ありがとうございました。

お礼日時:2001/06/23 11:08

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