目次

コントロール名を表す文字列からコントロールを取得する - 文字列名のstring型からのコントロールのアクセス

コントロール名を表す文字列から、コントロールを取得するコードを紹介します。

UI

下図のUIを作成します。Buttonを1つTextBoxを1つ、Labelを5つ配置します。


コード

以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GetControlByName
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string sName = textBox1.Text;
      Control[] cList = this.Controls.Find(sName, true);
      for (int i = 0; i < cList.Length; i++) {
        if (cList[i] is Label) {
          ((Label)cList[i]).Text = "Penguin";
        }
      }
    }
  }
}

解説

string sName = textBox1.Text;
テキストボックスに入力されたコントロール名の文字列を取得します。

Control[] cList = this.Controls.Find(sName, true);
フォームのControlsプロパティのFind()メソッドを呼び出し、コントロール名の文字列からコントロールを見つけます。Findメソッドの戻り値は該当するコントロールが格納されたControlクラスの配列になります。

for (int i = 0; i < cList.Length; i++) {
  if (cList[i] is Label) {
    ((Label)cList[i]).Text = "Penguin";
  }
}
Findメソッドで得たControlクラスの配列を調べ、配列の要素がLabelコントロール(Labelクラス)であれば要素をLabelクラスにキャストし、Textプロパティに"Penguin"を表示しします。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


テキストボックスに"Label3"と入力します。


button1をクリックするとLabel3の文字列が"Penguin"に変わります。


テキストボックスに入力する文字列を"Label5"にすると一番下のラベルの文字列が"Penguin"に変わります。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2012-06-07
Copyright © iPentec all rights reserverd.