- - PR -
Button_1〜Button_50のTextプロパティに値をループ処理で代入
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 |
|
投稿日時: 2003-04-24 11:15
こんにちは。
過去ログから、「コントロール名を配列」で検索してみてはどうでしょう? |
|
投稿日時: 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