【问题标题】:Dynamic Control names in C#C# 中的动态控件名称
【发布时间】:2013-01-24 10:33:32
【问题描述】:

我正在尝试以下代码:

for (int i = 0; i < students.Length; i++)
{
    "student" + i.ToString().Text = students[i];
}

我已经有很多标签,每个标签的名称如下: 学生1 学生2 学生3 . .

但是我得到了这个错误: 错误 1“字符串”不包含“文本”的定义,并且找不到接受“字符串”类型的第一个参数的扩展方法“文本”(您是否缺少 using 指令或程序集引用?) F:\Homework \Homework\Form1.cs 161 46 家庭作业

有什么帮助吗??!

【问题讨论】:

    标签: c#


    【解决方案1】:

    你不能有动态变量名,几乎是任何语言。

    看起来您正在寻找一个 collectionarray 控件。

    类似:

    var studentControls = new List<Control>();
    studentControls.Add(student1); 
    studentControls.Add(student2);
    ...
    for (int i = 0; i < students.Length; i++)
    {
        studentControls[i].Text = students[i];
    }
    

    【讨论】:

      【解决方案2】:

      使用 Controls.Find("student" + i.ToString())

      【讨论】:

      • 可能工作也可能不工作,这取决于它所在的平台(winforms?webforms?WPF?Windows phone?)
      • F:\Homework\Homework\Form1.cs 161 46 家庭作业 - Form1.cs - 我猜是 WinForms
      【解决方案3】:

      这可能会有所帮助

      Controls.Find(string.Format("student{0}", i));
      

      更好的解决方案:

      设置你LabelsTag属性如下:

      Student1.Tag = 1;
      Student2.Tag = 2;
      Student3.Tag = 3;
      

      我假设您的Labels 位于名为container 的容器控件中。使用此代码:

      foreach(var item in container.Children) //based on your container type this line may change
      {
          if(item is Label)
          {
              Label temp = ((Label)item);
              temp.Text = students[int.Parse(temp.Tag.ToString())]
          }
      }
      

      【讨论】:

      • 你可以省略 .ToString() 方法,因为 string.Format 默认已经使用它了。
      【解决方案4】:

      通过执行i.ToString(),您将获得一个字符串,它没有属性 Text :)。这就是导致您的异常的原因。

      如果Students 是具有.Text 属性的控件列表,则使用该属性并删除ToString(),否则,删除.Text

      【讨论】:

        猜你喜欢
        • 2011-02-20
        • 2011-05-27
        • 1970-01-01
        • 2017-04-12
        • 2013-02-22
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        相关资源
        最近更新 更多