- 日時: 2009/12/27 13:02
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[コントロール共通][基本コード][] * * キーワード:ループ処理,全てのコントロール,配列処理,同時処理,, * ***********************************************************************************
元質問:コントロール名と配列 - ゆーみん 2004/03/30-19:57 No.8542
Form1に *Text1(0),Text1(1),Text1(2) *Text2(0),Text2(1),Text2(2) という6個のコントロールがあります。 これら全てに「AAA」という文字を入れたい場合、
For i = 0 To 2 Form1.Text1(i).Text = "AAA" Next i
とやりますよね。 この「Text1」と「Text2」もForNextでループ させたいのですが、わかりません。 「Form1.Controls(〜」とか、やるのかな? と考えたのですが、書き方が分かりません。 ============================================================= 同様の質問をよく見かけますので掲載しておきます。 又、色々のパターンの回答をされているので他にも色々参考に なると思います --- by 花ちゃん --- =============================================================
------------------------------------------------------------------------------ Re: コントロール名と配列 - 魔界の仮面弁士 2004/03/30-20:10 No.8544 ------------------------------------------------------------------------------
幾つかの手法が考えられます。
案1: 'コントロール名はループさせない Dim i As Integer For i = 0 To 2 Text1(i).Text = "AAA" Text2(i).Text = "AAA" Next
案2: '全コントロールを列挙し、コントロール名で判断 Dim Ctrl As Control For Each Ctrl In Controls If Ctrl.Name Like "Text[12]" Then If Ctrl.Index = 0 Or Ctrl.Index = 1 Or Ctrl.Index = 2 Then Ctrl.Text = "AAA" End If End If Next
案3: 'For Eachでコントロール配列の配列を列挙 Dim TextBoxes As Variant Dim i As Integer For Each TextBoxes In Array(Text1, Text2) For i = 0 To 2 TextBoxes(i).Text = "AAA" Next Next
案4: 'Controlsコレクションにコントロール名を指定 Dim num As Integer Dim i As Integer For num = 1 To 2 For i = 0 To 2 Controls("Text" & CStr(num))(i).Text = "AAA" Next Next
案5: '処理したいコントロールを集めたコレクション(または配列)を用意しておく Option Explicit Private MyTextBoxes As Collection Private Sub Form_Load() 'コレクションとして登録しておく Set MyTextBoxes = New Collection MyTextBoxes.Add Text1(0) MyTextBoxes.Add Text1(1) MyTextBoxes.Add Text1(2) MyTextBoxes.Add Text2(0) MyTextBoxes.Add Text2(1) MyTextBoxes.Add Text2(2) End Sub Private Sub Command1_Click() '登録しておいたコレクションを使って処理 Dim Txt As TextBox For Each Txt In MyTextBoxes Txt.Text = "AAA" Next End Sub
|