从“列表值”中填充文本框

时间:2013-07-09 12:37:25

标签: c# winforms

我有一个从LINQ to XML查询创建的列表。该列表可以包含1,2,3或4个值。我在表单上有四个文本框,应根据List中的值填充,但我无法弄清楚如何执行此操作,因为列表中的元素数量会有所不同。根据列表中的值的数量动态创建文本框会更好吗?我怎么能这样做?

这似乎是一项相当普遍的任务,但我无法找到解决方案。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:0)

听起来你想要创建一个foreach循环并遍历linq查询,在每个查询上创建一个新文本框并将其添加到表单中。看看到目前为止你有什么帮助。我在下面使用列表而不是linq查询给出了一个例子,但是后面的内容是相同的

private void Form1_Load(object sender, EventArgs e)
    {
        var newList= new List<string> {"box1", "box2", "box3"};

        foreach (var boxName in newList)
        {
            TextBox newTextBox = new TextBox();
            newTextBox.Text = boxName;
            this.Controls.Add(newTextBox);
        }
    }

答案 1 :(得分:0)

假设您有一个列表

       List<int> testList = new List<int>(){1,2,3};
       foreach(int i in testList)
        {
          TextBox test = new TextBox();
          test1.Name = "textBox"+i;
           youcOntrl.Controls.Add(test1);
         }    

您也可以向他们提供他们的位置和大小等。

答案 2 :(得分:0)

动态创建,或只是填充现有4,无所谓。选择哪一个最适合您的UI要求。 (甚至可能已经建议的DGV)

首先,您需要包含控件的内容,假设您有一个名为MyPanel的面板,该面板仅包含这些文本框,而不包含任何其他内容......

这是负载动态方法:

MyPanel.Controls.Clear();
int count = 1;
foreach(var item in listOfValues)
{
    TextBox tb = new TextBox();
    tb.Name = "MyTextbox" + i;
    tb.Text = item.ToString();//or whatever property you have for the value
    tb.Location = new Point(0, 0 + (25 * (i - 1)));
    MyPanel.Controls.Add(tb);
}

这是填充现有方法,假设您有4个TextBox,例如名为“TextBox1”:

int count = 1;
foreach(var item in listOfValues)
{
    TextBox tb = MyPanel.Controls.Find("TextBox" + i) as TextBox;
    tb.Text = item.ToString();//or whatever property you have for the value
}

注意:您需要确保listOfItems不包含比您有文本框更多的项目,否则您将获得异常

答案 3 :(得分:0)

您可以在表单设计器中创建4个文本框,并将其Visible属性设置为默认值(从属性窗格中)。

然后,您可以按如下方式打开列表的count属性:

switch (els.Count)
{
    case 1:
        textBox1.Text = els[1].Value;
        textBox1.Visible = true;
        break;
    case 2:
        textBox1.Text = els[1].Value;
        textBox1.Visible = true;
        textBox2.Text = els[2].Value;
        textBox2.Visible = true;
        break;
    case 3:
        textBox1.Text = els[1].Value;
        textBox1.Visible = true;
        textBox2.Text = els[2].Value;
        textBox2.Visible = true;
        textBox3.Text = els[3].Value;
        textBox3.Visible = true;
        break;
    case 4:
        textBox1.Text = els[1].Value;
        textBox1.Visible = true;
        textBox2.Text = els[2].Value;
        textBox2.Visible = true;
        textBox3.Text = els[3].Value;
        textBox3.Visible = true;
        textBox4.Text = els[4].Value;
        textBox4.Visible = true;
        break;
    default:
        break;
}

如果您的列表是IEnumerable,则必须首先调用ToList()方法获取List<XElement>,因为IEnumerable类型没有Count属性。< / p>

答案 4 :(得分:0)

如果它是4或更少,那么您不必动态创建文本框。您可以禁用无法填充的文本框。特别是如果您按顺序命名文本框,如TextBox1,TextBox2等,那么您可能会编写如下代码:

    for (int i = 1; i <= 4; i++)
    {
         if (i <= list.Count)
            { 
              this.Controls["TextBox"+i.ToString()].Text = list[i-1];
              this.Controls["TextBox"+i.ToString()].Enabled = True;
             }
         else
             {
               this.Controls["TextBox"+i.ToString()].Enabled = False;
             }                 
    }

因此,如果您的列表中有2个项目,则List.Count为2,因此将填充Textbox1和2,并禁用TextBox3和4。