• ベストアンサー

全てのオブジェクトのプロパティーを一気に変更する方法

フォーム上に配置している全てのオブジェクトのプロパティを 一気に変更したいのですが、何か良い方法はありませんか? 設計段階では全て選択して一気に変更できますよね・・・ しかしながら、run状態で一気に変更する方法が見つかりません。 例として様々な名前ついたオブジェクトをコードで「Enabled=false」に変更したいのですが、この場合はやはり、ひとつのオブジェクトごとにコードを記述しなくてはならないのでしょうか。

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

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.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 って方法もありますが、用途が違いますね。

xiaolong_goo
質問者

お礼

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

その他の回答 (1)

  • y_an
  • ベストアンサー率57% (24/42)
回答No.1

そのような方法は今までで聞いた事ありません。 (実はそのような方法があったら申し訳ないのですが...) しかし、そのようなケースに遭遇したことはあります。 その時、私はこのように対処しました。 例えば、テキストボックスやラベルが複数あり、 ある状況によって、使えたり使えなかったりするパターンが 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 とりあえず、一気にとはいきませんが、 一つ一つ書かなくても良い分、いくらか楽だとは思いますが。 ご参考までに...。

xiaolong_goo
質問者

お礼

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

関連するQ&A

  • オブジェクトのプロパティーをVBAで操作する方法

    今、Excel97とVBAを用いて、ツールを作成しています。 VBAでシートに貼り付けたボタンをEnabled=TrueにしているのをEnabled=Falseにしたいと思い、ヘルプを元に作成しました。しかし、「変数が定義されていません。」と表示されてしまいます。 Sheet オブジェクト名:CommandButton1 VBA sub 表示操作() CommandButton1.Enabled = True ← エラー箇所 end sub オブジェクトのプロパティーをVBAから操作する方法を教えて下さい。

  • editableプロパティを変更しても反映されません。(Flex 3.

    editableプロパティを変更しても反映されません。(Flex 3.0) テキストボックスが編集不可になるプログラムをボタンに配置しましたが、ボタンを押しても反映されません。editableプロパティをenabledプロパティに変えて試してみると、こちらは反映されるため、その他コードに間違いはなさそうな気がします。 ボタン操作でテキストボックスのeditableプロパティのture、falseを切り替えて反映させることは無理なのでしょうか。 function noedit():void{ textbox.editable=false; }

  • 全てのプロパティが空白のオブジェクトは・・。

    例えば、 「aaa」、「bbb」、「ccc」とプロパティを持つオブジェクト「$obj_test」で、 $obj_test->aaa = "" ; $obj_test->bbb = "" ; $obj_test->ccc = "" ; とした場合、「empty($obj_test)」では真とはなりません。 全てのプロパティが空白のオブジェクトを、emptyと瞬時に判断する関数または方法はあるでしょうか?

    • ベストアンサー
    • PHP
  • Excel2010 グラフプロパティ変更を一気に

    Excel2010でグラフプロパティ変更をダイヤログボックスの「閉じる」で一気に反映する方法 Excel2010でグラフを描いているとき、ダイヤログボックスでプロパティを1つ変える毎に、ダイヤログボックスを閉じなくても逐次変更が反映されます。これを無効にし、「閉じる」ボタンを押した時点で一気に反映するようにする方法は無いものでしょうか? 軽いデータを描いている時は便利なのですが、データ量が多いと1つ変えるたびに再描画を行うのでとても時間がかかります。 2003までは閉じるで一気に反映されたので良かったのですが。

  • 大量のオブジェクトで同様のイベント処理をしたい場合の記述

    Excel VBAでフォームなどに大量のオブジェクトを配置して、各々のオブジェクトで同様のイベントを処理したいのですが、まとめて記述する方法はあるのでしょうか。 ユーザーフォーム上に大量の数値入力ボックス(TextBoxオブジェクト)を配置して、全てのボックスに同様の入力値制限を課そうとして、コードが肥大化して困っています。どうかよろしくお願い致します。 例) Sub TextBox1_change() <プロシージャー> end sub Sub TextBox2_change() <プロシージャー> end sub ・・・・・・ Sub TextBox10_change() <プロシージャー> end sub (<プロシージャー>部分は共通)のように延々と記述しなくても済む方法はあるのでしょうか。

  • クラスでプロパティを使う方法

    お世話になります。 VCの勉強をしていて良く分からないところが出てきました。 オブジェクトにはプロパティが付いていますが、 それをクラスではどのように記述しているのでしょう。 メンバ変数としてpublicで書けばプロパティになると思うんですが、 プロパティっていうのは変更するとオブジェクトも変化するではないですか。 例えばボタンの.topとか.leftを変化させれば大きさや位置が変わります。 そういう変化は何かメンバ関数を作って記述するのかなと思ったんですけど それだとメソッドになってしまうので、やはり違う気がします。 WEBも色々探してみたんですけど、 探し方が悪かったのか、よく分かりませんでした。

  • 実行状態中にオブジェクトの配置、サイズ変更はできますか?

    ご質問させていただきます。 Visual Basic 2005 を使っています。 やりたいこととは、 実行状態のフォーム(GroupBoxオブジェクト等)にTextBoxや線/円オブジェクトを置いたり、 そのオブジェクトをマウスクリックで”選択して”縦横のサイズを変更したり、位置を変更したいのです。 (できればマウス右クリックでプロパティの変更なども) 大まかに言えば、 実行状態のフォームに「デザイン状態の操作」や「Excel上の図形描画の操作」と同じようなことができるのでしょうか? (ツールボックスからデザインフォーム上へのオブジェクトの配置、配置したオブジェクトに マウスクリックをしてのサイズ変更、コピー&ペースト処理など) はじめは、直線や四角形を描画して期待通りのことができるかと思いましたが、 やはり描画した後にその線を”つまむ”ことができませんでした。 ちなみに、VB2005ではLineやShape系はないので、VB2005 PowerPacks2.0 を入れることで、 VB6でのLineコントロールみたいな動きはできました。 良いアドバイスありましたらお願いいたします。

  • コントロールのプロパティー値をコードで変更したい

    アクティブXコントロールのオブジェクトのプロパティーを手作業で変更するのではなくて、 マクロのコードで変更できればいいと思うのですが、コードの書き方がさっぱりわかりません。 私がやりたことは 下の画像にあるバーコードのコントロールのValueプロパティの値をVBAのコードで指定したい ということです。 一体、どんな書き方をすればいいんでしょうか? できればズバリのコードをそのまま提示して欲しいです。

  • VB .net コントロールのプロパティ設定方法

    Visual Basic 2010を勉強しています。 フォームに貼り付けたコントロールのプロパティの設定についてですが、 今までは、貼り付けた後にプロパティウインドウで直接いじっていました。 (Text、Font、Imageなど...) ですが、知人が書いたコードを見ていると、コードの中で設定しているようなのです。 プロパティウインドウで設定した方が、視覚的にも確認しながら設定できるのでそうしていたのですが、コード内で設定するのと違いはあるのでしょうか?(パフォーマンスやコードの見やすさなど...) 動的にコントロールを配置したい時や、プロパティを変更したい場合にはコード内で操作しますが、初期設定やラベル等の変更することがないようなコントロールに関しては、どちらでも同じような気がするのですが... 実際に皆さんがどうされているのかも気になり、質問させて頂きました。 以上、何卒よろしくお願いいたします。

  • 【Excel VBA】ユーザーフォーム テキストボックスの有効・無効について

    Excel2003を使用しています。 ユーザーフォームにテキストボックスを11個とコマンドボタンを2個配置しています。 TextBox9に“0000”(文字列です)が入力されたら、TextBox10を有効に、それ以外は無効に設定したく、TextBox10のEnabledプロパティをFalse、LockedプロパティをTrueにして、コードを下記のように書いたのですが、うまくいきません。どこか、間違っているでしょうか? コードは該当部分だけ、載せています。よろしくお願いします。 -------------------------------------------------- If TextBox9.Text = "0000" Then TextBox10.Enabled = True TextBox10.Locked = False TextBox10.BackStyle = fmBackStyleOpaque Else TextBox10.Enabled = False TextBox10.Locked = True TextBox10.BackStyle = fmBackStyleTransparent End If