Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:如何从其他变量构造变量_C#_Winforms_.net 3.5 - Fatal编程技术网

C#:如何从其他变量构造变量

C#:如何从其他变量构造变量,c#,winforms,.net-3.5,C#,Winforms,.net 3.5,如何在C#中构造新变量 我的意思是,拥有这样的东西 public void updateXXX(string endingOfVariable, int newValue) { this.textBox_{endingOfVariable} = newValue; } 这是用Php实现的: $a = 'var'; $b = 'iable'; $variable = 'var'; echo ${$a.$b}; 但也许在C#中是可能的 问题是——我在C#Windows窗体中创建了约500个

如何在C#中构造新变量

我的意思是,拥有这样的东西

public void updateXXX(string endingOfVariable, int newValue)
{
   this.textBox_{endingOfVariable} = newValue;
}
这是用Php实现的:

$a = 'var'; $b = 'iable';
$variable = 'var';
echo ${$a.$b};
但也许在C#中是可能的

问题是——我在C#Windows窗体中创建了约500个文本框,如果我想设置一个值,我需要构建
switch(){case:;}表示500个大小写。

如果为每个文本框指定了一个名称,则可以创建将名称映射到控件的字典:

var boxes = form.Controls.OfType<TextBox>().ToDictionary(t => t.Name);

public void Update(string name, int newValue)
{
    boxes[name].Text = newValue.ToString();
}
var-box=form.Controls.OfType().ToDictionary(t=>t.Name);
公共无效更新(字符串名称,int newValue)
{
框[name].Text=newValue.ToString();
}

在Windows窗体中有500个文本框本身就是一个问题(太多控件可能会导致速度变慢)


一种方法是在创建控件时将其放入字典(希望是通过编程创建的),然后使用字典键拉出所需的控件。

您需要使用反射

  static void Main( string[] args )
  {
    Type type = typeof(MyClass);
    object o = Activator.CreateInstance(type);

    FieldInfo field = type.GetField("text", BindingFlags.NonPublic | BindingFlags.Instance);
    field.SetValue(o, "www.domain.com");
    string text = (string)field.GetValue(o);

    Console.WriteLine(text);

  }

忽略您正在使用500个案例执行switch语句的事实,您可以使用FindControl方法,并将其强制转换为文本框

((TextBox)FindControl("textbox_" + endingOfVariable)).Text = newValue;

@dtb:+1,这是一种构建字典的非常灵活的方法。您应该在ToDictionary之前添加一个.Where(t=>!string.IsNullOrEmpty(t.Name)),以防止捕获没有名称的文本框并导致构建字典时出现异常。我已经在windows窗体中创建了它们,作为可视化编程(拖放,然后根据需要格式化它们)-我现在能做什么?你手动拖放了500个文本框并给它们重命名了?Yikes,我希望你能拿到薪水。是的,在我的工作中,我被要求-‘你必须这样做,如果你不想怎么做,这是你的问题’,所以‘我做到了’:DI将复制粘贴我的回复到另一篇帖子:“我已经在windows窗体中创建了它们作为可视化编程(拖放,然后根据需要格式化)——我现在能做什么?”受到典型苹果或谷歌用户界面的启发;-)他不需要使用反射。我认为FindControl会更智能。@sr pt:是的,我同意,反射是通用的解决方案,但是使用表单控件,FindControl可能会更好。没想到。