• ベストアンサー

繰り返し処理で記述したいのです。

初心者です。 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文等を使って簡単にかけないでしょうか? 教えてください。

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

  • ベストアンサー
回答No.5

>とエラーになってしまいます。 このような使い方は出来ないのでしょうか? 多分それは 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

rabu_chihaha
質問者

お礼

ありがとうございました。 ctl.DataSource = dtSet.Tables("master") のところは、 MyCombobox.DataSource = dtSet.Tables("master") に変更しましたが、解決いたしました。 TryCastを利用すればよいのですね。

その他の回答 (5)

回答No.6

#1,#5だ >試してないけどTryCastかますことでできると思う >Next ← このNextはタイプミスです

回答No.4

こんにちは コントロール名に規則性があるようなので、以下の方法ではどうでしょうか for index=1 to 10  Me.Controls("c_name" & cstr(index)).DataSource = dtSet.Tables("name")   ... next

rabu_chihaha
質問者

お礼

回答ありがとうございます。 試みたのですが、 Me.Controls("c_name" & cstr(index)).DataSource が 'System.Windows.Forms.Control' のメンバではありません。 となってしまってうまくいきませんでした

  • NYOI
  • ベストアンサー率58% (56/96)
回答No.3

For Each ctrl In Me.Controls If TypeOf ctrl Is ComboBox Then 'ここに処理を書く End If Next これだと確実にフォーム上の全てのコンボボックスを拾えるのでは。

rabu_chihaha
質問者

補足

ありがとうございます。 早速やってみたのですが、 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' のメンバではありません。 とエラーになってしまいます。 このような使い方は出来ないのでしょうか?

回答No.2

あ、そうそう、せっかく#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でも例外が発生しない)

回答No.1

'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

関連するQ&A