質問: { reader["TBox_name"] }; } } ``` objectやstringはTextBoxに変換できないとの事なので、困っています。 参考になるサイトや意見など何でも良いので情報が欲しいです。 よろしくお願いします。
回答: `Controls`プロパティのstringインデクサはあくまで`Controls`内しか検索しないため、フォーム直下に存在しない一般の場合では再帰的に処理を行う必要があります。 実装例を挙げると以下のようになります。`Find`は指定したコントロール(=`parent`)の子孫にある`Name`が`name`のコントロールを探すメソッドです。 ``` private static Control Find(Control parent, string name) { // まずparentの子コントロールでnameを検索します。 var r = parent.Controls[name]; // 子コントロールでnameが見つかった場合、該当コントロールを返します。 if (r != null) { return r; } // parentの子コントロールでnameが見つからなかった場合、今度は子コントロールでFindを実行します。 foreach (Control c in parent.Controls) { // TODO:必要ならcに対する条件を追加します。 // 子コントロールcを起点にしてnameを検索します。 r = Find(c, name); if (r != null) { // cの子孫にnameが見つかった場合、該当コントロールを返します。 return r; } } // nameが見つからなかった場合、nullを返します。 return null; } ``` またリフレクションを用いてフィールドを探すこともできます。 ``` typeof(Form1).GetField(textBox1.Name, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(this) ```