通过循环获取文本框值

时间:2013-11-11 06:29:36

标签: c# .net for-loop textbox

我有10个文本框txt_Address1,txt_Address2 ... txt_Address10和10列,用于将它们的值存储在数据库中,即Address1,Address2 ... Address10。现在我想获取文本框的每个值并将其存储到相应的列中。为此,而不是为每个文本框写10行代码,我想通过FOR循环来做。任何人都可以向我推荐合适的解决方案吗?

8 个答案:

答案 0 :(得分:1)

创建文本框时,请将它们存储在集合

List<TextBox> textboxControls = new List<TextBox>();

然后在创建它们时,将它们添加到集合

textboxControls.Add(control);

然后你可以遍历它们并访问它们的值

foreach(var control in textboxControls )
    DoSomethingWithText(control.Text);

答案 1 :(得分: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);
}

答案 2 :(得分:0)

你可以把它们放在一个列表中,然后遍历那个列表......

编辑:似乎lostincomputer在我前面20秒回答... 同样......两者都会起作用

答案 3 :(得分: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
            }
        }

答案 4 :(得分:0)

在花费(浪费)时间编写代码来为这样设计的数据库工作之前,您应该重新设计数据库。在10个地址的表中有10列不是一个好主意。您应该能够拥有0 - 无穷大地址。查看如何建立关系数据库。

基本上:

表:客户

CustomerID
Name
Etc.

表:CustomerAddresses

CustomerID
Address
City
State
Zip

答案 5 :(得分:0)

第1步: 您可以浏览所有Form控件,只考虑TextBox控件。

来自所有表单TextBox控件的

第2步:将包含Name的TextBox过滤为“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());
        }

答案 6 :(得分: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" ...
            }
        }

答案 7 :(得分: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;
});