2017/07/28(Fri) 07:15:07 編集(投稿者)
■No84698 (カメ さん) に返信
> ---------------
> string str = "変更したいtextBox等のName";
> this.Controls[str].Enabled = false;
> ---------------
このコードの場合、this(=Form) 直下にあれば取得できると思います。
例えば、TabControl や GroupBox、Panel の上に配置されている場合は、this 直下ではないため、取得できません。
----
すべての Control の配下も走査的に調べるよりは、自分で Dictionary でも作った方がマシかもしれませんね。
リフレクションでフィールドをあらかじめ探しておくとか。
private readonly Dictionary<string, Control> _cachedControls;
public Form1()
{
InitializeComponent();
var fields = GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
_cachedControls = fields.Where(field => field.FieldType.IsSubclassOf(typeof(Control)))
.ToDictionary(field => field.Name, field => (Control)field.GetValue(this));
}
private void button1_Click(object sender, EventArgs e)
{
try
{
_cachedControls[textBox3.Text].Enabled = false;
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}