- PR -

Button_1〜Button_50のTextプロパティに値をループ処理で代入

1
投稿者投稿内容
ポテチ
ベテラン
会議室デビュー日: 2003/03/28
投稿数: 69
投稿日時: 2003-04-23 20:16
Button_1〜Button_50までボタンがあります。
ボタンのアンダーバー以下数字をループ処理させて
Button_nのTextプロパティにデータベースから取得した
値を代入したいのですが、どうすればよいのでしょうか?
Dim dt As DataTable = ds.Tables("goout")
Dim row As DataRow
For Each row In dt.Rows
me.btnA_?.Text = CType(row.Item("ボタン名"), String)
Next

Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-24 11:15
こんにちは。

過去ログから、「コントロール名を配列」で検索してみてはどうでしょう?
mei
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 114
投稿日時: 2003-04-24 21:18
こんばんは、meiです。

FormのControlsを使う方法と、リフレクションを使う方法を紹介します。
Controlsの方は簡単ですが、コントロールに対してしか使えません。
リフレクションは、ほぼ全ての場面で使えますが、面倒です。

-- ここから

Imports System.Reflection

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "

Public Sub New()
MyBase.New()

InitializeComponent()

End Sub

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

Private components As System.ComponentModel.IContainer

Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents Button3 As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.Button3 = New System.Windows.Forms.Button
Me.SuspendLayout()
Me.Button1.Location = New System.Drawing.Point(8, 8)
Me.Button1.Name = "Button1"
Me.Button1.TabIndex = 0
Me.Button1.Text = "Button1"
Me.Button2.Location = New System.Drawing.Point(8, 40)
Me.Button2.Name = "Button2"
Me.Button2.TabIndex = 1
Me.Button2.Text = "Button2"
Me.Button3.Location = New System.Drawing.Point(8, 72)
Me.Button3.Name = "Button3"
Me.Button3.TabIndex = 2
Me.Button3.Text = "Button3"
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.Add(Me.Button3)
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Controlsを使う方法
' 画面上の全てのボタンのTextプロパティを"ボタンX"に変更する
For Each c As Control In Controls
' cがボタン型でかつ、変数名が"Button"で始まっていたら
If GetType(Button) Is c.GetType() And c.Name.StartsWith("Button") Then
c.Text = "ボタン" + c.Name.Substring("Button".Length)
End If
Next
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' リフレクションを使う方法
' 画面上の全てのボタンのTextプロパティを"ぼたんX"に変更する

' タイプを取得
Dim t As Type = Me.GetType()
' NonPublicなフィールドを取得
Dim fis As FieldInfo() = t.GetFields(BindingFlags.NonPublic Or BindingFlags.Instance)
For Each fi As FieldInfo In fis
' フィールドの名称が"Button"で始まっていたら(先頭の_は勝手に付けられる?)
If fi.Name.StartsWith("_Button") Then
' インスタンス(Me)からフィールドの値を取得
Dim o As Object = fi.GetValue(Me)
' フィールドの型がButtonだったら
If GetType(Button) Is o.GetType() Then
' Textプロパティに値を設定
Dim pi As PropertyInfo = t.GetProperty("Text")
pi.SetValue(o, "ぼたん" + fi.Name.Substring("_Button".Length), Nothing)
End If
End If
Next
End Sub
End Class

-- ここまで

ボタン1,2を押してみて下さい。

1

スキルアップ/キャリアアップ(JOB@IT)