2017-04-11 50 views
-2

我有10个文本框。像textBox1.Text,textBox2.Text等。我需要使用textBox2.Text if i=2,textBox2.Text if i =3等。 我所做的:如何使用int i选择文本框NR

string t = "textBox"+i+".Text"; 

但结果来为 “textBox1.Text”。 如何将'i'值插入到文本框名称中而不是1.然后将结果作为textBox1.Text 因此,我可以将其用作名称并将值从文本框传递到我的程序。

+4

这是一个Web应用程序(Web窗体,MVC等)或桌面应用程序(的WinForms,WPF等)。两者都有“TextBox”控件,但是根据你在哪个世界开发,答案是非常不同的。 – KeithS

+0

*如果i = 2,我需要使用textBox2.Text。 textBox2.Text如果我= 3等。*咦? –

+0

其winForm应用程序 –

回答

3

根据我的想法,您可以将每个TextBox的引用存储在一个数组中,然后使用您的int来引用它。

TextBox[] boxes = new TextBox[10]; 
boxes[0] = textBox1; 
// ... follow the pattern 
boxes[9] = textBox10; 

string value = boxes[i-1].Text; // Gets the value of the textBoxi.Text 
+0

我无法将textBox1.Text放入数组中。我收到一条消息:无法隐式转换类型'字符串'到'System.Windows.Forms.TextBox' –

+0

不知道我在做什么错误 –

+0

@RaimondasLukosius - 看看我写的代码示例。您不要将'textBox1.Text'放入数组中,只需将'textBox1'放入数组中。然后当你需要文本时,你可以通过调用'boxes [i-1] .Text'来获得文本。# – pstrjds

0

你能做到像这样:

private TextBox GetTB(int i) { 
    string name = "textBox" + i.ToString(); 
    foreach (var ctrl in Controls) { 
     var tbox = ctrl as TextBox; 
     if (tbox?.Name == name) return tbox; 
    } 
    return null 
} 
+0

它不只是textBox +我的文本框+ 1 + .Text –

+0

该方法只是获取您需要的文本框。所以你使用它像'var tb = GetTB(2)?Text;' – dcg

+0

我需要插入我在textBox和.Text之间 –

0

最简单的方法,如果你需要这种方式访问​​他们在C#代码,将维持一个数组或这些文本框的List,索引按照它们的数值的顺序。然后你可以简单地引用textBoxes[i-1]并获得编号为“i”的文本框。你如何得到这个数组取决于你正在开发的内容。对于的WinForms,你可以在Form.Controls财产使用少许的Linq:

public static IEnumerable<Control> Flatten(this IEnumerable<Control> controls)   
    { 
     var results = new List<Control>(); 

     foreach (var control in controls) 
     { 
      results.Add(control); 
      control.Controls.OfType<Control>().Flatten(results); 
     } 

     return results; 
    } 

    private static void Flatten(this IEnumerable<Control> controls, List<Control> results) 
    { 
     foreach (var control in controls) 
     { 
      results.Add(control); 
      control.Controls.OfType<Control>().Flatten(results); 
     } 
    } 

    ... 

    var textboxes = Form.Controls.Flatten() 
        .OfType<TextBox>() 
        .Where(t=>t.Name.StartsWith("textBox")) 
        .OrderBy(t=>t.Name) 
        .ToArray(); 
+0

感谢您的帮助我刚刚使用数组运行良好 –

相关问题