クラスの各プロパティの名前と値の型を含むこの配列があります...
public string[,] test = new string[,]
{
{ "s", "ID", "textBox" },
{ "s", "Status", "" },
{ "s", "User", "" },
{ "s", "JobTitle", "textBox" },
{ "s", "Number", "textBox" },
{ "s", "Club", "" },
私のフォームのすべてのテキストボックスは「txt」で始まるので、すべてのテキストボックス名を動的に持つことができます..
for (int i = 0; i < (mobile.test.Length / 3); i++)
{
if (mobile.test[i, 2] == "textBox")
{
TextBox tb = new TextBox();
string textBoxName = "txt" + mobile.test[i, 1];
そして、次のように、リフレクションを介して動的に classe プロパティ値を取得できます。
var type = mobile.GetType();
var property = type
.GetProperty(mobile.test[i, 1])
.GetValue(mobile);
したがって、私の目標は、すべてのテキストボックスにクラスプロパティ値を入力することですが、方法が見つからないようです...このようなことを試しましたが、テキストボックスの名前をオブジェクトに取得できません
object obj = tb
.GetType()
.GetProperty("Name")
.SetValue(tb, textBoxName); --> this doens't work
obj
.GetType()
.GetProperty("Text")
.SetValue(obj, Convert.ToString(property), null);
しかし、これは機能していません... :(
更新1:
わかりました、私はそれを次のように動作させました:
string textBoxName = "txt" + mobile.test[i, 1];
object[] tb = this.Controls.Find(textBoxName, true);
object obj = tb[0];
Type mobileType = mobile.GetType();
var property = mobileType.GetProperty(mobile.test[i, 1]).GetValue(mobile);
obj.GetType().GetProperty("Text").SetValue(obj, Convert.ToString(property), null);
それはうまくいきますが、それが最善の方法なのだろうか...?ありがとうございました