C# 如何使用int i选择文本框NR

C# 如何使用int i选择文本框NR,c#,string,winforms,names,C#,String,Winforms,Names,我有10个文本框。比如textBox1.Text,textBox2.Text等等。如果I=2,我需要使用textBox2.Text;如果I=3,我需要使用textBox2.Text,依此类推。 我做到了: 但结果是“textBox1.Text”。 如何将“i”值插入文本框名称而不是1。并将结果作为textBox1.Text获取 所以我可以使用它作为名称,并将值从textbox传递到我的程序 根据我认为您的要求,您可以将对每个文本框的引用存储在一个数组中,然后使用int引用它 TextBox[]

我有10个文本框。比如
textBox1.Text
textBox2.Text
等等。如果I=2,我需要使用
textBox2.Text;如果I=3,我需要使用
textBox2.Text,依此类推。
我做到了:

但结果是“textBox1.Text”。 如何将“i”值插入文本框名称而不是1。并将结果作为textBox1.Text获取
所以我可以使用它作为名称,并将值从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
你可以这样做:

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
}

如果需要以C#代码的方式访问这些文本框,最简单的方法是维护这些文本框的数组或
List
,并按其数值顺序进行索引。然后您可以简单地引用
文本框[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();
公共静态IEnumerable展平(此IEnumerable控件)
{
var results=新列表();
foreach(控件中的var控件)
{
结果:添加(对照组);
Controls.Controls.OfType()展平(结果);
}
返回结果;
}
私有静态空白展平(此IEnumerable控件,列出结果)
{
foreach(控件中的var控件)
{
结果:添加(对照组);
Controls.Controls.OfType()展平(结果);
}
}
...
var textboxs=Form.Controls.flatte()
第()类
.Where(t=>t.Name.StartsWith(“文本框”))
.OrderBy(t=>t.Name)
.ToArray();

这是web应用程序(WebForms、MVC等)还是桌面应用程序(WinForms、WPF等)。两者都有“TextBox”控件,但答案根据开发环境的不同而不同。如果I=2,我需要使用textBox2.Text。textBox2.Text如果i=3,依此类推。哈?它的winForm应用程序不仅仅是textBox+i,它的textBox+1+。TextMethod只获取你需要的文本框。所以你像
var tb=GetTB(2)?.Text那样使用它我需要在textBox和.Text之间插入I。我无法将textBox1.Text放入数组。我收到的消息是:无法将类型“string”隐式转换为“System.Windows.Forms.TextBox”@RaimondasLukosius-看看我编写的代码示例。您不需要将
textBox1.Text
放入数组,只需将
textBox1
放入数组即可。然后,当你需要文本时,你可以通过调用[i-1]框来获得它。text
你的方法很简单,工作也很好。我刚刚意识到其中一个框是名为textBox1的组合框。当我更换这个时,一切都很顺利。谢谢你的帮助:)
    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();