我有 10 个文本框 txt_Address1、txt_Address2...txt_Address10 和 10 列将它们的值存储在数据库中,即 Address1、Address2...Address10。现在我想获取文本框的每个值并将其存储到相应的列中。为此,我不想为每个文本框编写 10 行代码,而是想通过 FOR 循环来完成。有人可以建议我合适的解决方案吗?
问问题
3517 次
8 回答
1
创建文本框时,将它们存储在集合中
List<TextBox> textboxControls = new List<TextBox>();
然后当您创建它们时,将它们添加到集合中
textboxControls.Add(control);
然后你可以遍历它们并访问它们的值
foreach(var control in textboxControls )
DoSomethingWithText(control.Text);
于 2013-11-11T06:33:51.457 回答
0
或者您可以从没有列表的表单中访问它们:
foreach(Control control in MyForm.Controls)
{
if(control is TextBox)
{
//do what you want
}
}
或者,如果您将它们放在 groupBox 中
foreach(Control control in myGroupBox.Controls)
{
if(control is TextBox)
{
//do what you want
}
}
希望这可以帮助!
或者使用 FOR 循环:
//Controls is the Controls collection of the form
for(int i=0;i<Controls.Count;i++)
{
if(Controls[i] is TextBox)
{
//do what you want
}
}
于 2013-11-11T06:39:48.407 回答
0
在您花费(浪费)时间为这样设计的数据库编写代码之前,您应该重新设计您的数据库。在一个表中为 10 个地址设置 10 列并不是一个好主意。您应该能够拥有从 0 到无穷大的地址。查找如何制作关系数据库。
基本上:
表:客户
CustomerID
Name
Etc.
表:客户地址
CustomerID
Address
City
State
Zip
于 2013-11-11T06:41:40.663 回答
0
只需在 TextBox 数组中引用文本框;
TextBox txt1 = new TextBox();
TextBox txt2 = new TextBox();
TextBox txt3 = new TextBox();
TextBox txtN = new TextBox();
TextBox[] allTextBoxes = new TextBox[] { txt1, txt2, txt3, txtN };
foreach(TextBox item in allTextBoxes)
{
StoreValue(item.Text);
}
或者你可以使用
List<TextBox> lst = new List<TextBox>();
lst.Add(txt1);
lst.Add(txt2);
lst.Add(txt3);
foreach(TextBox item in lst)
{
StoreValue(item.Text);
}
于 2013-11-11T06:33:09.313 回答
0
您可以将它们放在一个列表中,然后遍历该列表...
编辑:似乎 lostincomputer 比我早 20 秒回答...同样...两者都可以
于 2013-11-11T06:33:38.773 回答
0
步骤1:
您可以通过所有Form
控件并且只考虑 TextBox
控件。
第 2 步:从所有表单TextBox
控件中过滤包含Name
“ txt_Address%
”的文本框,此处%
可以是 1、2、3、4 等任何内容,
代码如下:
List<String> txtValues=new List<string>();
foreach (var control in this.Controls)
{
if((control is TextBox) && (((TextBox) control).Name.Contains("txt_Address")))
txtValues.Add(((TextBox) control).Text.ToString());
}
于 2013-11-11T06:45:17.260 回答
0
您可以像这样使用 Controls.Find() :
for (int i = 1; i <= 10; i++)
{
Control[] matches = this.Controls.Find("txt_Address" + i.ToString(), true);
if (matches.Length > 0 && matches[0] is TextBox)
{
TextBox tb = (TextBox)matches[0];
// ... do something with "tb" ...
}
}
于 2013-11-11T06:45:18.433 回答
0
var columns = new Dictionary<string, string>();
for (int i = 1; i <= 10; i++) columns.Add("Address" + i, string.Empty);
var textBoxes = Controls.Find("txt_Address", true).Where(t => t is TextBox).ToList();
columns.ToList().ForEach(c =>
{
var index = c.Key.Replace("Address", string.Empty);
var textBox = textBoxes.FirstOrDefault(t => index.Equals(t.Name.Replace("txt_Address", string.Empty)));
if (textBox != null) columns[c.Key] = textBox.Text;
});
于 2013-11-11T07:38:37.213 回答