For Eachで取得するコントロールの順番

解決


フェイク  2005-11-17 00:45:12  No: 127781

フォーム内のコントロールを取得して順番に処理したいとき次のような
書き方で行っています。
サンプル:
With Me
For Each MyControl In .Controls
        If TypeName(MyControl) = "CheckBox" Then
              処理・・・・・
        End If
Next
End With

この場合、取得するコントロールの順番を決まったとおり行うにはどう
したらよいのでしょうか。TabIndexのプロパティに順番に処理されるの
かと思い希望する順番にTabIndexを変更してみましたが、順番は変わり
ませんでした。
どうぞよろしくお願いします。


Geo=TK3  2005-11-17 01:21:18  No: 127782

# 環境に言及がないので VB6.0 を想定 (^^;; 。

確認してませんが、たぶん Controls コレクションに追加された順番 (≒ 
デザイン画面でコントロールを作成した順番) ではないかと。
この順番を変えたいとなると .frm ファイルを直接テキストエディタで編集
してコントロールの順番を入れ替えるしかない気がします。
もっともデザイン画面でコントロールを追加したり、最背面/最前面への移動
なんかしたら、再度やり直しになるのでお勧め出来ませんが...(^^;;

コントロールを処理する順番に依存するのなら For Each を使わずに直接コ
ントロールを指定した方がよいと思いますよ。


フェイク  2005-11-17 01:40:55  No: 127783

Geo=TK3 さま  さっそくのご指導ありがとうございます。

>.frm ファイルを直接テキストエディタで編集
>してコントロールの順番を入れ替えるしかない気がします。
さっそくチャレンジしてみます。

>直接コントロールを指定した方がよい
おっしゃるとおりなのですが、コントロールの数がべらぼうに多く
またFor Each の中でやっている処理は、SQL分のSELECT項目の
作成なのでかなり記述が長くなってしまいます。・・・
単に邪魔くさいだけなのですが。根が横着なもので・・・。
(CheckBoxの名前にDBの項目名をそのまま使いCheckBoxにチェッ
クがはいっているとSELECT分にそのコントロール名を追加していく)
結果はまたご報告します。
とりあえず、お礼まで。


GOD  2005-11-17 02:23:39  No: 127784

For Eachは使っていないけど。

Private Sub Command1_Click()
    Dim MyControl As CheckBox
    Dim strCtrlName As String
    Dim strCtrlNameB() As String
    Dim lngCount As Long

    strCtrlName = "Check1,Check2,Check3,Check4,Check5"
    strCtrlNameB = Split(strCtrlName, ",")
    For lngCount = LBound(strCtrlNameB) To UBound(strCtrlNameB)
        Set MyControl = Controls(strCtrlNameB(lngCount))
        If MyControl.Value = 1 Then
            Debug.Print MyControl.Name
            '処理
        End If
    Next
End Sub


Geo=TK3  2005-11-17 02:31:08  No: 127785

>またFor Each の中でやっている処理は、SQL分のSELECT項目の
>作成なのでかなり記述が長くなってしまいます。・・・

そうであれば GOD さんが提示してくれたサンプルのようにするのがよいと
思います。
strCtlName にコントロール名を列記していく手間は掛かりますが、.frm 
ファイルを直接いじるよりは楽 (^^;; 。

てか SELECT 文の選択リストの構築なら別に順番にこだわる必要はない気が
するので、フェイクさんが最初に提示したコードのままで十分なのでは (^^;; 。


フェイク  2005-11-17 02:34:33  No: 127786

GODさま

>strCtrlName = "Check1,Check2,Check3,Check4,Check5"
で自分の好きな順番に指定すればいいんですね。こんな
方法もあったのですね。ありがとうございます。今後は
この方法を使わせていただきます。

今回はGeo=TK3さまにお教えいただいた方法で結果はOK
でした。.frmをエディタで直接書き換えることができる
ことも今回勉強させていただきました。
本当に皆様ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加