- ベストアンサー
繰り返し処理で記述したいのです。
初心者です。 visualbasic2005を利用しています。 1つのフォームにコンボボックスが10個あります。 コントロールの名前はc_name1からc_name10とつけられています。 このコンボボックスに対して、データソース等をセットしたいです。 1つであれば c_name1.DataSource = dtSet.Tables("name") c_name1.DisplayMember = "name" c_name1.ValueMember = "code" と記述しますが、 10個にセットするとなると、 同じようなコードを10回記述しなければいけませんか? これをfor文等を使って簡単にかけないでしょうか? 教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>とエラーになってしまいます。 このような使い方は出来ないのでしょうか? 多分それは Controlsの要素がControlだからだね For Each ctl In Me.Controls Dim MyCombobox As System.Windows.Forms.Combobox MyCombobox = TryCast(ctl,System.Windows.Forms.Combobox) If Not(MyCombobox Is Nothing) Then ctl.DataSource = dtSet.Tables("master") ctl.DisplayMember = "name" ctl.ValueMember = "code" End If Next 試してないけどTryCastかますことでできると思う Next
その他の回答 (5)
- himajin100000
- ベストアンサー率54% (1660/3060)
#1,#5だ >試してないけどTryCastかますことでできると思う >Next ← このNextはタイプミスです
- sugao_chib
- ベストアンサー率59% (22/37)
こんにちは コントロール名に規則性があるようなので、以下の方法ではどうでしょうか for index=1 to 10 Me.Controls("c_name" & cstr(index)).DataSource = dtSet.Tables("name") ... next
お礼
回答ありがとうございます。 試みたのですが、 Me.Controls("c_name" & cstr(index)).DataSource が 'System.Windows.Forms.Control' のメンバではありません。 となってしまってうまくいきませんでした
- NYOI
- ベストアンサー率58% (56/96)
For Each ctrl In Me.Controls If TypeOf ctrl Is ComboBox Then 'ここに処理を書く End If Next これだと確実にフォーム上の全てのコンボボックスを拾えるのでは。
補足
ありがとうございます。 早速やってみたのですが、 For Each ctl In Me.Controls If TypeOf (ctl) Is ComboBox Then ctl.cDataSource = dtSet.Tables("master") ・・・(1) ctl.DisplayMember = "name" ・・・(2) ctl.ValueMember = "code" ・・・(3) End If Next (1)(2)(3)で'System.Windows.Forms.Control' のメンバではありません。 とエラーになってしまいます。 このような使い方は出来ないのでしょうか?
- himajin100000
- ベストアンサー率54% (1660/3060)
あ、そうそう、せっかく#1でTryCastしているので For i As Integer = 1 To 2 If Not(MyCombobox Is Nothing) Then MyCombobox.SelectedIndex = i - 1 End If Next i とかにしたほうがよかったかも(For i As Integer = 1 To 3でも例外が発生しない)
- himajin100000
- ベストアンサー率54% (1660/3060)
'Form1にはCombobox1とCombobox2が貼り付けられている。 'それぞれ4つずつItemが登録されている。 'この辺について調べたいときは「コントロール 配列」とかで引くと 'ひっかかりやすいかもね Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 1 To 2 Dim MyCombobox As ComboBox = TryCast(Me.Controls("Combobox" & i.ToString), System.Windows.Forms.ComboBox) MyCombobox.SelectedIndex = i - 1 Next End Sub End Class
お礼
ありがとうございました。 ctl.DataSource = dtSet.Tables("master") のところは、 MyCombobox.DataSource = dtSet.Tables("master") に変更しましたが、解決いたしました。 TryCastを利用すればよいのですね。