从“列表值”填充文本框
本文关键字:填充 文本 列表值 列表 | 更新日期: 2023-09-27 18:21:35
我有一个从LINQ到XML查询创建的列表。该列表可以包含1、2、3或4个值。表单上有四个文本框,应该根据列表中的值填充,但我不知道如何做到这一点,因为列表中的元素数量会有所不同。根据列表中的值数量动态创建文本框会更好吗?我该怎么做?
这似乎是一项相当常见的任务,但我一直未能找到解决方案。如有任何帮助,我们将不胜感激。
动态创建,或者只是填充现有的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个名为"TextBox1"的TextBoxes,例如:
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包含的项目不会超过您的文本框,否则您将得到一个异常
假设您有一个列表
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);
}
您还可以提供它们的位置和大小等。
听起来你想创建一个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);
}
}
您可以在表单设计器中创建4个文本框,并将其Visible
属性设置为false作为默认值(从属性窗格)。
然后,您可以按如下方式打开列表的计数属性:
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
属性。
如果是四个或更少,则不必动态创建文本框。您可能会禁用无法填充的文本框。特别是,如果你按照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。