• 締切済み

実行時追加したコントロールの識別

VB2008を使用しています。 プログラム実行中に追加したコントロールをどのように識別すればいいのかがわからなくて困っています。 例えば以下のようにすると、 itemsが1と2のコンボボックスが10個できますが、 すべてNewComboBoxという名前のコントロールのため、 最終的にそれぞれ1か2どちらを選択したかを知りたいときに、 10個のコントロールをどのように識別すればよいかわかりません。 Dim NewComboBox As ComboBox = New ComboBox() For i = 1 To 10 NewComboBox = New ComboBox() NewComboBox.Items.Add(1) NewComboBox.Items.Add(2) NewComboBox.Location = New Point(5, 5 + (24 * (i - 1))) Me.Controls.Add(NewComboBox) Next 説明が不明瞭であるかもしれませんが、 お分かりの方いらっしゃいましたら、ご回答願います。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

VB 2008なら、コントロールに登録したイベントハンドラが呼び出される際、コントロール自身を第1引数(sender)として引き渡してくれるので、識別する必要ないかと。

この投稿のマルチメディアは削除されているためご覧いただけません。
hi3111
質問者

お礼

イベントハンドラを調べたら、 仰る意味がわかりました。 助かりました。 ありがとうございました。

関連するQ&A

  • キューとコンボボックスの使い方  VB2008

    VB2008を使っています。 キューとコンボボックスの使い方がわからないのですが、以下のソースで (1)キューとデータソースを使う。 Dim queue As Queue = New Queue(20) For i As Integer = 0 to 9 queue.Enqueue( i.ToString() ) Next i ComboBox1.DataSource = queue.ToArray ComboBox2.DataSource = queue.ToArray (2)べたな方法 ComboBox1.Items.Clear() For i As Integer = 0 to 9 ComboBox1.Items.Add( i.ToString() ) Next i ComboBox2.Items.Clear() For i As Integer = 0 to 9 ComboBox2.Items.Add( i.ToString() ) Next i ------------------------ (1) (1)と(2)は厳密にどのように違うのでしょうか? (2) (1)で心配なのは、キューの上限を20にしていて、実際使っているのは10個で後は空です。 この状態で、コンボボックスのDataSourceにセットした場合、(2)と同じように10件だけになっているのでしょうか? (3) (1)は同じキューを使いまわしています。コンボボックス1と2は独立して使えるのでしょうか?(データは同じです。)

  • ComboBoxのItem追加

    VB.NETでの開発初心者です。 ComboBoxのItem追加について、1行づつ追加していくのは理解できているのですが、HTMLでのListBox「OPTIONS設定」の様にArrayListにて一括追加する方法がわかりません。 ご存知の方、よろしくお願いします。  <1行づつ追加>  Me.ComboBox1.Items.Clear()  Me.ComboBox1.Items.Add(New ComboItems(Key値, 表示値))    ※ComboItemsクラスは、別途作成 <一括追加>  Dim comboArray As New ArrayList  comboArray.Add(New ComboItems(Key値, 表示値))  Me.ComboBox1.Items.???(comboArray) ← ここがわからない  

  • 【VB2005】コントロールを配列に。

    下記のコードを変更して、コントロールの値を配列に代入して、 その値をもとに、ボタンを複製して追加したいと思っています。 Public Class frmStart Dim btnNewButton1 As New Button Private Sub frmStart_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load NewButton1.Text = "処理1" btnNewButton1.ForeColor = Color.DimGray btnNewButton1.Location = New Point(10, 100) btnNewButton1.Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton1) end sub End Class やりたいことは、Dim btnNewButton() As New Button のようにデータを配列にして、 btnNewButton(0).ForeColor = Color.DimGray btnNewButton(0).Location = New Point(10, 100) btnNewButton(0).Size = New Size(180, 30) btnNewButton(1).ForeColor = Color.DimGray btnNewButton(1).Location = New Point(380, 100) btnNewButton(1).Size = New Size(180, 30) '// ボタンを追加します Me.Controls.Add(btnNewButton(0))     Me.Controls.Add(btnNewButton(1)) という事をしたいのですが、方法が解らなくて困ってます。 お知恵を貸してください。

  • データグリッドビューの任意の列を削除

    VB2010にて、下記のコードを実行すると、左端にいらない列が表示されます。 左端にコンボボックスを表示したいのですが、うまくいきません。 左端の列を削除する方法。 または、左端にコンボボックスを表示する方法を教えていただけませんでしょうか。 ご存知の方、どうぞよろしくお願いいたします。 '■■■データグリッドビューセット■■■ '初期化 Me.DataGridView1.Columns.Clear() '最下部の新しい行を非表示 Me.DataGridView1.AllowUserToAddRows = False '行追加 Me.DataGridView1.RowCount = 気筒数 + 2 'コンボボックス列を追加 Dim i As Integer Dim BS As New BindingSource() For i = 1 To 系列数 BS.Add(系列名(i)) Next i Dim ComboBox As New DataGridViewComboBoxColumn() ComboBox.HeaderText = "系列名を選択" ComboBox.DataSource = BS Me.DataGridView1.Columns.Add(ComboBox) Me.DataGridView1.Columns(0).Width = 110

  • VB2010でのコントロール多次元配列について

    教えてください。 実行中にコントロールを生成したいのですが、 Public Class Form1  Private myTxt(,) As System.Windows.Forms.TextBox  Me.myTxt = New System.Windows.Forms.TextBox(59, 2) {}  Dim i As Integer  Dim j As Integer  Dim h As Integer  Dim p As Integer  h = 10  p = 100  For i = 0 To Me.myTxt.GetLength(0) - 1   For j = 0 To Me.myTxt.GetLength(1) - 1    Me.myTxt(i, j) = New System.Windows.Forms.TextBox    Me.myTxt(i, j).Name = "myTxt" + i.ToString() + j.ToString()    Me.myTxt(i, j).Size = New Size(100, 30)    Me.myTxt(i, j).Location = New Point(p, h)    p = p + 100   Next j   h = h + 30  Next i  Me.myPnl.Controls.AddRange(Me.myTxt) と書くと最後の行が波線になり、 “型 'System.Windows.Forms.TextBox の 2 次元配列' の値を 'System.Windows.Forms.Control' に変換できません。”とエラーになります。 これはAddRangeは多次元配列に使用できないということなのでしょうか? 色々検索してみましたが、コントロールの生成に関する多次元配列が見つけられずに 困っていました。 最後のAddRange(Me.myTxt)をAdd(Me.myTxt(i,j))などと変えたりしても別のエラーになり、 基本的に間違っている気がしますがどこだかがわかりません。 詳しい方、宜しくお願い致します。

  • 【VB2005】 実行時に動的にコントロールを作成した後のコントロールへの処理

    こんばんわ、VB5.0を1週間ほどかじって現在2005に乗り換えたばかりのド初心者です。 (用語の使い方などが間違っている可能性があるかもしれません。おかしなところは指摘していただけるとありがたいです) VB5.0を使っていたときはコントロール配列を使って簡単にできた事が2005になってコントロール配列を使えなくなったため行き詰ってしまいました。 内容は、ある操作をすると画面にコントロールが1つずつ追加されていき、そのコントロールのプロパティを他のコントロールから操作できるようにする物です。 検索などで情報を集めて、なんとかコントロールを追加していくことができるようにはなったのですが、プロパティを変更するためにコントロールにアクセスする際にエラーになってしまって困っています。 一つだけコントロールが追加された場合は、問題なくプロパティをいじれるのですが、2つ以上追加した場合に最新のコントロール以外のプロパティをいじろうとするとエラーになってしまうのです。 下に私の作りたいプログラムを簡潔にしたサンプルソースを記述させていただきます。 間違いの指摘やアドバイスをいただければ幸いです。 FormにはAddButtonというボタンが一つだけあります。 Dim Index As Integer Private Buttons() As System.Windows.Forms.Button Private Labels() As System.Windows.Forms.Label Private Sub AddButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click Index += 1 Me.Buttons = New System.Windows.Forms.Button(Index) {} Me.Labels = New System.Windows.Forms.Label(Index) {} Me.SuspendLayout() Me.Buttons(Index - 1) = New System.Windows.Forms.Button Me.Buttons(Index - 1).Text = Index - 1 Me.Buttons(Index - 1).Size = New Size(30, 30) Me.Buttons(Index - 1).Location = New Point((Index - 1) * 30, 50) Me.Labels(Index - 1) = New System.Windows.Forms.Label Me.Labels(Index - 1).Text = Index - 1 Me.Labels(Index - 1).Size = New Size(30, 30) Me.Labels(Index - 1).Location = New Point((Index - 1) * 30, 100) AddHandler Me.Buttons(Index - 1).Click, _ AddressOf Me.Buttons_Click Me.Controls.AddRange(Me.Buttons) Me.Controls.AddRange(Me.Labels) Me.ResumeLayout(False) End Sub Private Sub Buttons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Labels(sender.text).ForeColor = Color.Red End Sub

  • コード上でコントロール配置

    いつもお世話になっております。 コード上でコントロールを配置したいのですが、うまくいきません。 Dim location As New Point(100, 100) Dim button As Button button = New Button button.Height = 50 button.Weight = 50 button.Location = location button.Visible = True 何が足りないのか・・教えていただきたいです。。

  • コントロールの配列について

    VB2005で質問です。 初心者のため勉強しながら作成している為かうまくできません。コントロール配列を使ってボタンを204個、 チェックボックスを768個表示するプログラムを作りました。 6個のボタンのうち、1個のボタンをクリックすると128個のチェックボックスがONし、 別の6個のボタンのうち1個は、128個のチェックボックスがOFFし、 96個のボタンは、1個押すと8個のチェックボックスがONし、残りの96個はOFFするプログラムを作成していますが、 配列に登録した名前でクリックイベントハンドラーを作成すると 「HANDOLES句には、それを含む型または基本型の1つで定義されたWith Events変数が必要です」というエラー表示が出ます。 またチェックボックスも同じように名前は宣言されていませんと出ますが、 どう直せば良いか把握できていないのでどなたか教えて貰えないでしょうか。 Dim chkIo(768) As System.Windows.Forms.CheckBox Dim btnIdOn(6) As System.Windows.Forms.Button Dim btnIdOff(6) As System.Windows.Forms.Button Dim btnIoOn(96) As System.Windows.Forms.Button Dim btnIoOff(96) As System.Windows.Forms.Button Const strName1 As String = "chkIo" Const strName2 As String = "btnIdOn" Const strName3 As String = "btnIdOff" Const strName4 As String = "btnIoOn" Const strName5 As String = "btnIoOff" Dim i As Integer Dim a As Integer Dim b As Integer Dim c As Integer Dim d As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For c = 0 To 5 For i = 0 To 127 Checkboxio() Next b = 0 ButtonIoOn() b = 0 ButtonIoOff() ButtonIdOn() ButtonIdOff() Next End Sub Public Sub Checkboxio() chkIo(i) = New CheckBox With chkIo(i) .Size = New Size(15, 15) If i < 8 Then a = i b = 0 Contchk() 以下省略 ElseIf i < 128 Then a = i - 120 b = 15 Contchk() End If End With Me.Controls.Add(chkIo(i)) End Sub Public Sub Contchk() With chkIo(i) .Location = New Point((a * 25) + (290 * c) + 80, (b * 35) + 75) a = a + (10 * b) + (200 * c) .Tag = a .Name = strName1 & a.ToString End With End Sub Public Sub ButtonIoOn() For i = 0 To 15 btnIoOn(i) = New Button With btnIoOn(i) a = i .Size = New Size(15, 15) .Location = New Point((290 * c) + 19, (b * 35) + 74) a = a + (20 * c) .Name = strName4 & a.ToString b = b + 1 End With Me.Controls.Add(btnIoOn(i)) Next End Sub Public Sub ButtonIoOff() For i = 0 To 15 btnIoOff(i) = New Button 以下省略 Next End Sub Public Sub ButtonIdOn() 以下省略 End Sub Public Sub ButtonIdOff() btnIdOff(c) = New Button With btnIdOff(c) .Size = New Size(15, 15) .Location = New Point((290 * c) + 154, 29) .Name = strName3 & c.ToString End With Me.Controls.Add(btnIdOff(c)) End Sub ここからエラーがでたプログラムです Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIdOn.Click, btnIdOn1.Click, btnIdOn2.Click, btnIdOn3.Click, btnIdOn4.Click, btnIdOn5.Click, btnIdOff0.Click, _ btnIdOff1.Click, btnIdOff2.Click, btnIdOff3.Click, btnIdOff4.Click, btnIdOff5.Click, btnIoOn0.Click  Select Case DirectCast(sender, Button).Name Case btnIoOn0.Name For i = 0 To 7 Me.chkIo(i).Checked = True Next End Select End Sub

  • ユーザーコントロールの配列化

    VB.NETのWindowsコントロールライブラリで作成したコントロールをメインになるプロジェクトから動的に呼び出したいのですが、複数のコントロールをボタンで表示非表示を行いたいので、配列化したいと考えているのですが、どのようにすればよいですか? public testControl() as Object Private Sub Form_Load(... testControl(0) = New Test1.Form1 testControl(1) = New Test2.Form1 testControl(2) = New Test3.Form1 ... For i = 0 to 10 testcontrol(i).Location = New Point(0,0) testcontrol(i).Size = New Size(100,100) testcontrol(i).Visible = False Next End Sub 見たいな処理を行いたいと考えています。 ほかによい方法があれば教えてください。

  • コンボボックスのSelectedItemの使い方

    エリアテーブルを取得し コンボボックスの見える値は「値」にして コンボボックスを取得するときには「コード」を 取れるようにしたいと思っています。 どのように書くと取得できるのでしょうか? バインドするやり方が分からなくて 下記のようになっています。 Dim strSql As String Dim dr As SqlClient.SqlDataReader = Nothing Dim daAdp As New SqlClient.SqlDataAdapter Dim cmd As New SqlClient.SqlCommand Dim ds As DataSet = New DataSet() mConn = New SqlConnection 'DBのオープン  Conn.DbConnect()   Dim dbCmd As SqlCommand = Nothing 'SQL発行 strSQL = "SELECT コード,値 " strSQL = strSQL & "FROM エリア" Conn.ExecSqlSelect(strSql, dr)   ComboBox1.Items.Clear() Do While dr.Read ComboBox1.Items.Add(dr.GetString(1)) ComboBox1.SelectedItem = dr.GetString(0) Loop

専門家に質問してみよう